Pagini recente » Cod sursa (job #681988) | Cod sursa (job #2701578) | Cod sursa (job #764905) | Cod sursa (job #2911773) | Cod sursa (job #337103)
Cod sursa(job #337103)
#include<cstdio>
#include<vector>
#include<algorithm>
using namespace std;
const int N = (1<<13);
const int oo = (1<<14);
vector<pair<int,int> > v;
int k,n,x[N],poz[N],lung[N],rez[N];
void citire()
{
scanf("%d",&n);
for(int i=0,x;i<n;++i)
{
scanf("%d",&x);
v.push_back(make_pair(x,i));
}
}
void prel_x()
{
sort(v.begin(),v.end());
x[1+v[0].second]=++k;
rez[1]=oo;
for(int i=1;i<n;++i)
{
if(v[i].first!=v[i-1].first)
rez[++k]=oo;
x[1+v[i].second]=k;
}
}
void calcul()
{
for(int i=1;i<=n;++i)
if(x[i]==1 || poz[x[i]-1])
{
poz[x[i]]=i;
if(x[i]==1)
{
lung[i]=1;
rez[x[i]]=1;
}
else
{
lung[i]=lung[poz[x[i]-1]]+i-poz[x[i]-1];
rez[x[i]]=min(rez[x[i]],lung[i]);
}
}
printf("%d\n",rez[k]==oo ? -1 : rez[k]);
}
int main()
{
freopen("secv.in","r",stdin);
freopen("secv.out","w",stdout);
citire();
prel_x();
calcul();
return 0;
}