博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
找连续数 HDU - 5247
阅读量:4114 次
发布时间:2019-05-25

本文共 1120 字,大约阅读时间需要 3 分钟。

小度熊拿到了一个无序的数组,对于这个数组,小度熊想知道是否能找到一个k 的区间,里面的 k 个数字排完序后是连续的。 
现在小度熊增加题目难度,他不想知道是否有这样的 k 的区间,而是想知道有几个这样的 k 的区间。 
Input输入包含一组测试数据。 
第一行包含两个整数n,m,n代表数组中有多少个数字,m 代表针对于此数组的询问次数,n不会超过10的4次方,m 不会超过1000。第二行包含n个正整数,第 I 个数字代表无序数组的第 I 位上的数字,数字大小不会超过2的31次方。接下来 m 行,每行一个正整数 k,含义详见题目描述,k 的大小不会超过1000。 
Output第一行输"Case #i:"。(由于只有一组样例,只输出”Case #1:”即可) 
然后对于每个询问的 k,输出一行包含一个整数,代表数组中满足条件的 k 的大小的区间的数量。 
Sample Input
6 23 2 1 4 3 534
Sample Output
Case #1:22

思路:当时做这个题的时候忘记预处理这件事情了,一开始用线段树后来用的优先队列,但是都TLE了,然后才想起来预处理这个东西。。。。。。我们可以离线处理一下,把所有满足条件的区间都找出来,我们可以直接用set进行处理。

1.如果当前区间内已经包含过这个数,则这个区间肯定不满足条件,break

2.判断当前区间内最大值与最小值之差+1==s.size();

#include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;const int maxn=1e4+10;int a[maxn];int num[maxn];set
s;int main(){ int m,n; memset(num,0,sizeof(num)); cout<<"Case #1:"<
>n>>m; for(int i=0; i
::iterator it; if(s.find(a[j])!=s.end()) { break; } s.insert(a[j]); it=s.end(); --it; int minn=*(s.begin()); int maxx=*it; if(maxx-minn+1==s.size()) num[s.size()]++; } } for(int i=0; i
>k; cout<
<

转载地址:http://dbgsi.baihongyu.com/

你可能感兴趣的文章
TinyMCE 富文本编辑器 ━━ (Version: 5.0.4)内含icon对照表(转载)
查看>>
TinyMCE 富文本编辑器 ━━ 自定义插件之弹窗控件布局
查看>>
PHP开发日志 ━━ PhpSpreadsheet使用
查看>>
jQuery资料整理 ━━ ajaxfileupload.js报错:jQuery.handleError is not a function
查看>>
服务器配置篇 ━━ windows iis快速关闭ssl3.0 ssl2.0 rc4 等
查看>>
PHP开发日志 ━━ 与上传相关的资料整理~突破2M限制
查看>>
PHP开发日志 ━━ zip压缩
查看>>
服务器配置篇 ━━ 中文域名(.公益)解析、党政机关挂标及如何正确运行在服务器
查看>>
学习日志 ━━ 关键字和保留字
查看>>
Golang学习日志 ━━ 下载及安装
查看>>
Golang学习日志 ━━ 一图一代码看懂range、byte、rune、uint8、int32
查看>>
Golang学习日志 ━━ 简单写文件操作的四种方法
查看>>
Golang学习日志 ━━ LiteIDE的主要配置
查看>>
Golang学习日志 ━━ 调用系统默认浏览器打开指定链接(全平台)
查看>>
Golang学习日志 ━━ 切片(slice)的一些总结
查看>>
Golang学习日志 ━━ 函数传递指针参数的语法糖误区
查看>>
Golang学习日志 ━━ map等类型的指针分析
查看>>
Golang学习日志 ━━ 实现io.copy的几种方式
查看>>
Golang学习日志 ━━ 当前时间time.Now()和自定义时间time.Parse()的差值now.Sub(parse)注意点
查看>>
Golang学习日志 ━━ 单向通道在函数中作为参数和返回值时的具体表现
查看>>