传送门
思路
1.找区间里的最大mx和最小值mi,mx-mi+1等于区间长度。
2.区间里可能有重复的值,例如2 2 4,满足条件1,但是不连续。
代码
#include<cstdio>
#include<set>
#include<algorithm>
using namespace std;
const int MAXN=1e4+4;
int arr[MAXN],ans[1005];
int main(){
int n,m;
set<int>s;
scanf("%d%d",&n,&m);
for(int i=0;i<n;i++) scanf("%d",&arr[i]);
for(int i=0;i<n;i++){
s.clear();
for(int j=i;j<n && j-i<1000;j++){
s.insert(arr[j]);
if(j-i+1!=s.size()) break;//set里面有重复的数
if(*(--s.end())-*s.begin()+1==s.size()) ans[j-i+1]++;//满足区间连续
}
}
puts("Case #1:");
for(int i=0;i<m;i++){
int x;
scanf("%d",&x);
printf("%d\n",ans[x]);
}
return 0;
}