Pagini recente » Cod sursa (job #386946) | Cod sursa (job #117526) | Cod sursa (job #1294427) | Cod sursa (job #115328) | Cod sursa (job #2643)
Cod sursa(job #2643)
#include <stdio.h>
long tmp[5001];
void qsort(long st,long dr)
{
register long i=st,j=dr,sc=tmp[(st+dr)>>1],aux;
do{
while(tmp[i]<sc)
++i;
while(tmp[j]>sc)
--j;
if(i<=j)
{
aux=tmp[i];
tmp[i]=tmp[j];
tmp[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], v[5001], d[5001], n;
register long i, j;
register long nr=0 , max=9999;
scanf("%ld",&n);
for(i=1;i<=n;++i)
{
scanf("%ld",&v[i]);
tmp[i]=v[i];
}
qsort(1,n);
tmp[0]=-1;
for(i=1;i<=n;++i)
if(tmp[i-1]^tmp[i])
++nr;
for(i=1;i<=n;++i)
{
x[i]=(v[i]==tmp[1]);
d[i]=(v[i]!=tmp[1])*10000+1;
for(j=1;j<i;++j)
if(x[j]>=x[i] && v[j]<v[i])
{
x[i]=x[j]+1;
d[i]=d[j]+i-j;
}
if(x[i]==nr && d[i]<max)
max=d[i];
}
printf("%ld\n",(max^9999)?max:-1);
return 0;
}