選擇長度最小的子段,使得包含所有出現的元素
//#pragma GCC optimize(2)
//#include <bits/stdc++.h>
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <set>
#include <map>
#define rush() int T;cin>>T;while(T--)
#define ms(a,b) memset(a,b,sizeof a)
#define E 1e-8
#define sd(a) scanf("%d",&a)
#define pd(a) printf("%d\n",a)
#define debug(a) cout<<"*"<<a<<"*"<<endl
#define IOS ios::sync_with_stdio(0); cin.tie(0); cout.tie(0)
#define PAUSE system("pause")
using namespace std;
typedef long long ll;
typedef unsigned ui;
typedef unsigned long long ull;
typedef pair<int,int> Pair;
const int inf=0x7f7f7f7f;
const int mod=100003;
const int N=1e6+5;
int n,m,t;
int i,j,k;
int a[N];
set<int> s;
map<int,int> mp;
int main()
{
//IOS;
while(~sd(n)){
for(i=0;i<n;i++){
sd(a[i]);
s.insert(a[i]);
}
int ans=n;
int sum=s.size(),num=0,s=0,e=0;
while(true){
while(e<n && num<sum)
if(mp[a[e++]]++==0) num++;
//相當於 mp[a[e]]==0; mp[a[e]]++; e++;
if(num<sum) break;
ans=min(ans,e-s);
if(mp[a[s++]]--==1) num--;
//mp[a[s]]==1; mp[a[s]]--; s++;
}
pd(ans);
//break;
}
return 0;
}