采用了map和set来协助尺取法的完成
#include <iostream>
#include <cstring>
#include <cstdio>
#include <queue>
#include <stack>
#include <cmath>
#include <map>
#include <set>
#include <algorithm>
#include <vector>
using namespace std;
const int N = 1000009;
set<int>all;
int p;
int arr[N];
map<int,int>countt;
void solve(){
cin>>p;
for(int i=1;i<=p;i++){
cin>>arr[i];
all.insert(arr[i]);
}
int n=all.size();
int s=1,t=1,num=0,res=p+1;
for(;;){
while(t<=p&&num<n){
if(countt[arr[t++]]++==0){
num++;
}
}
if(num<n) break;
res = min(res,t-s);
if(--countt[arr[s++]]==0){
num--;
}
}
printf("%d\n",res);
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
solve();
return 0;
}