6 2 3 2 1 4 3 5 3 4
Case #1: 2 2
#include<stdio.h>
#include<map>
#include<string>
using namespace std;
const int N = 1e4+5;
int main(){
int n,m,a[N],q[N];
int t=0;
while(scanf("%d%d",&n,&m)>0){
for(int i=0; i<n; i++)
scanf("%d",&a[i]);
int maxq=0;
for(int i=0; i<m; i++)
{
scanf("%d",&q[i]);
if(q[i]>maxq)maxq=q[i];
}
int ans[N]={0};
for(int i=0;i<n; i++){
int k=0,maxa=a[i],mina=a[i];
map<int,int>mp;
for(int j=1;j<=maxq&&i+j-1<n; j++){
if(mp[a[i+j-1]]==0)
k++,mp[a[i+j-1]]=1;
if(a[i+j-1]>maxa)maxa=a[i+j-1];
else if(a[i+j-1]<mina)mina=a[i+j-1];
if(j==k&&maxa-mina+1==k)
ans[k]++;
}
}
printf("Case #%d:\n",++t);
for(int i=0;i<m; i++)
printf("%d\n",ans[q[i]]);
}
return 0;
}
原文:http://blog.csdn.net/u010372095/article/details/46348435