sort扫一下
注意(++i)的位置
cin cout 过不去
#include <cstdio>
#include <algorithm>
#include <cassert>
using namespace std;
const int MAXN=1000111;
const int MAXM=MAXN;
int N;
int M;
int Vc[MAXM];
int Cnt=0;
int ANS;
struct Page {
long long v;
int id, k;
} P[MAXN];
bool cmpv(Page A, Page B) {
if(A.v==B.v) return A.id<B.id;
return A.v<B.v;
}
bool cmpid(Page A, Page B) {
return A.id<B.id;
}
int main() {
while(scanf("%d", &N)!=EOF) {
for(int i=1; i<=N; ++i) {
scanf("%lld", &P[i].v);
P[i].id=i;
}
sort(P+1, P+N+1, cmpv);
P[1].k=1;
for(int i=2; i<=N; ++i) {
P[i].k=P[i-1].k;
if(P[i].v!=P[i-1].v) ++P[i].k;
}
M=P[N].k;
sort(P+1, P+N+1, cmpid);
ANS=N;
for(int i=1, j=0; i<=N; ++i) {
while(Cnt<M && j<N) {
++j;
++Vc[P[j].k];
if(Vc[P[j].k]==1) ++Cnt;
}
if(Cnt==M) {
ANS=min(ANS, j-i+1);
}
//++i;
--Vc[P[i].k];
if(Vc[P[i].k]==0) --Cnt;
}
assert(Cnt==0);
printf("%d
", ANS);
}
return 0;
}