分析:使用STL的set容器实现,set的内部排序默认是从小到达的。先把结果预处理到一个数组中存储起来,之后直接输出即可。
#include<iostream>
#include<set>
using namespace std;
#define N 10005
int a[N];
int ans[N];
set<int> s; //默认从小到达排序
set<int>::iterator it;
int main()
{
int T=0;
int n,m,k,i,j;
while(cin>>n>>m)
{
for(i=0;i<n;i++)
cin>>a[i];
memset(ans,0,sizeof(ans));
for(i=0;i<n;i++)
{
s.clear();
s.insert(a[i]);
ans[1]++;
for(j=i+1;j<n;j++)
{
if(s.find(a[j])==s.end()) //保证不重复
s.insert(a[j]);
else break;
it=s.end();
if(*(--it)-*s.begin()+1==s.size())
ans[s.size()]++;
}
}
cout<<"Case #"<<++T<<":"<<endl;
while(m--)
{
cin>>k;
cout<<ans[k]<<endl;
}
}
return 0;
}
原文地址:http://blog.csdn.net/a809146548/article/details/46311979