https://vjudge.net/problem/POJ-3320
#include<iostream>
#include<algorithm>
#define int long long
using namespace std;
int n,cnt,type,ans=1000009,cntt[1000005];
struct node{
int bef,aft,id;
}a[1000005];
bool cmp1(node a,node b){
return a.bef<b.bef;
}
bool cmp2(node a,node b){
return a.id<b.id;
}
void add(int x){
if(cntt[x]==0){
cnt++;
}
cntt[x]++;
}
void jian(int x){
if(cntt[x]==1){
cnt--;
}
cntt[x]--;
}
signed main(){
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i].bef;
a[i].id=i;
}
sort(a,a+n,cmp1);
a[0].aft=1;
for(int i=0;i<n;i++){
if(a[i].bef==a[i-1].bef){
a[i].aft=a[i-1].aft;
}
else{
a[i].aft=a[i-1].aft+1;
}
}
type=a[n-1].aft;
sort(a,a+n,cmp2);
cnt=1;
cntt[a[0].aft]++;
for(int l=0,r=1;l<n;){
while(cnt<type){
r++;
add(a[r].aft);
}
if(r-l+1<ans){
ans=r-l+1;
}
l++;
jian(a[l].aft);
}
cout<<ans<<endl;
return 0;
}
样例过了捏,交上去看不懂什么意思,反正没对