UVA

/*
STLsort离散化==T
手工sort离散化==T
map在线==T
map离线处理c==A 240ms 
*/
#include<cstdio>
#include<map>
#define maxn 1000010
using namespace std;
int T,n,c[maxn],a[maxn],ans,s,t,num;
map<int,int>p;
int init(){
    int x=0,f=1;char s=getchar();
    while(s<'0'||s>'9'){if(s=='-')f=-1;s=getchar();}
    while(s>='0'&&s<='9'){x=x*10+s-'0';s=getchar();}
    return x*f;
}
int main()
{
    T=init();
    while(T--){
        n=init();s=1;ans=num=0;p.clear();
        for(int i=1;i<=n;i++){
            a[i]=init();
            if(p[a[i]]==0){
                p[a[i]]=i;c[i]=0;
            }
            else {
                c[i]=p[a[i]];p[a[i]]=i;
            }
        }
        while(1){
            for(t=s;t<=n;t++){
                if(c[t]>=s){
                    s=c[t]+1;c[t]=0;break;
                }
                ans=max(ans,t-s+1);
            }
            if(t>=n)break;
        }
        printf("%d
",ans);
    }
    return 0;
}
原文地址:https://www.cnblogs.com/yanlifneg/p/5990635.html