Pagini recente » Cod sursa (job #2475505) | Cod sursa (job #859908) | Cod sursa (job #3279399) | Cod sursa (job #1955308) | Cod sursa (job #2310663)
#include <bits/stdc++.h>
using namespace std;
int v[5005];
int val[5005];
vector<int>poz[5005];
int main()
{
freopen("secv.in","r",stdin);
freopen("secv.out","w",stdout);
int n,i,nr,cnt=0;
scanf("%d",&n);
map<int,int>mp;
for(i=1;i<=n;i++)
{
scanf("%d",&v[i]);
if(mp.find(v[i])==mp.end())
mp[v[i]]=1,val[++cnt]=v[i];
}
sort(val+1,val+cnt+1);
for(i=1;i<=cnt;i++)
mp[val[i]]=i;
for(i=1;i<=n;i++)
{v[i]=mp[v[i]];poz[v[i]].push_back(i);}int min1=n+1;
for(int w=0;w<poz[1].size();w++)
{
int start=poz[1][w];
int ant=poz[1][w];
for(i=2;i<=cnt;i++)
{
int st=0,dr=poz[i].size()-1;
while(st<=dr)
{
int med=(st+dr)/2;
if(ant>poz[i][med])st=med+1;
else
dr=med-1;
}
if(st==poz[i].size()){ant=2*n;break;}
ant=poz[i][st];
}
if(min1>(ant-start+1))min1=ant-start+1;
}
if(min1==n+1)min1=-1;
printf("%d\n",min1);
return 0;
}