标签:
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