Pagini recente » Cod sursa (job #1540449) | Cod sursa (job #2964203) | Cod sursa (job #1870649) | Cod sursa (job #672990) | Cod sursa (job #181442)
Cod sursa(job #181442)
#include<cstdio>
#include<algorithm>
const int inf=0x7fffffff;
int n,a[5001],b[5002],last[5001],rez[5001],m,i,j,x,min;
int number(int x)
{
int st=1,dr=m,mij;
while(st<dr)
{
mij=(st+dr)>>1;
if(b[mij]==x) return mij;
if(b[mij]<x) st=mij+1;
else dr=mij-1;
}
return st;
}
int main()
{
freopen("secv.in","r",stdin);
freopen("secv.out","w",stdout);
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d",&a[i]);
b[i]=a[i];
}
std::sort(&b[1],&b[n+1]);
j=0;b[0]=-1;
for(i=1;i<=n;i++)
if(b[i]!=b[j])
b[++j]=b[i];
m=j;
for(i=1;i<=n;i++)
if(a[i]==b[1])
{
rez[i]=1;
last[1]=i;
}
else
{
j=number(a[i]);
x=last[j-1];
if(x)
{
rez[i]=rez[x]+i-x;
last[j]=i;
}
}
min=inf;
for(i=1;i<=n;i++)
if(a[i]==b[m] && rez[i] && rez[i]<min)
min=rez[i];
printf("%d\n",min==inf?-1:min);
fclose(stdout);
return 0;
}