Pagini recente » Cod sursa (job #161732) | Profil LyonHater | Colors | Cod sursa (job #236870) | Cod sursa (job #2940)
Cod sursa(job #2940)
#include <stdio.h>
long tmp[5001], v[5001];
void qsort(long st,long dr)
{
register long i=st,j=dr,sc=v[(st+dr)>>1],aux;
do{
while(v[i]<sc)
++i;
while(v[j]>sc)
--j;
if(i<=j)
{
aux=tmp[i];
tmp[i]=tmp[j];
tmp[j]=aux;
aux=v[i];
v[i]=v[j];
v[j]=aux;
++i;--j;
}
}while((i<=j));
if(i<dr) qsort(i,dr);
if(j>st) qsort(st,j);
}
int main()
{
freopen("secv.in","r",stdin);
freopen("secv.out","w",stdout);
register long x[5001], n, viz[5001];
register long i, j, last, max;
scanf("%ld",&n);
for(i=1;i<=n;++i)
{
scanf("%ld",&v[i]);
tmp[i]=i;
}
qsort(1,n);
for(i=1;i<=n;++i)
if(i>v[1])
break;
else
{
viz[i]=1;
x[i]=1;
}
last=i-1;
for(;i<=n;++i)
{
x[i]=9999;
viz[i]=0;
for(j=last;v[j]==v[last];--j)
if(tmp[i]>tmp[j] && viz[j])
{
viz[i]=1;
if(tmp[i]-tmp[j]+x[j]<x[i])
x[i]=tmp[i]-tmp[j]+x[j];
}
if(x[i]==9999)
{
x[i]=-1;
viz[i]=0;
}
if(v[i+1]>v[i])
last=i;
}
max=9999;
for(i=n;v[i]!=v[last];--i)
if((viz[i]) && (max>x[i]))
max=x[i];
if(max==9999)
max=-1;
printf("%ld",max);
return 0;
}