这道题,用std::ios::sync_with_stdio(false);都超时,非得用scanf();
#include<iostream>
#include<cstdio>
#include<map>
#include<vector>
#include<set>
using namespace std;
int a[1000002];
set<int>s;
map<int,int>mp;
int main()
{
int n;
scanf("%d",&n);
int i,j;
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
s.insert(a[i]);
}
int len=s.size();
int cot=0;
int ans=0x3f3f3f3f;
int start=0;
j=0;
while(1)
{
while(cot<len&&j<n)
{
if(mp[a[j]]==0)
{
cot++;
}
mp[a[j]]++;
j++;
}
if(cot<len)
break;
ans=min(ans,j-start);
mp[a[start]]--;
if(mp[a[start]]==0)
cot--;
start++;
}
printf("%d\n",ans);
}