Cod sursa(job #987622)
| Utilizator | Data | 21 august 2013 08:32:33 | |
|---|---|---|---|
| Problema | Secv | Scor | 0 |
| Compilator | cpp | Status | done |
| Runda | Arhiva de probleme | Marime | 1.1 kb |
#include<cstdio>
int a[5001],i,j,k,m,n,b[5001],s,e,p=5001,l,f=1,g;
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]);
while(1)
{
if(f>=n)
break;
for(m=0,i=f;i<=n;i++)
{
if(a[b[m]]<a[i])
b[++m]=i;
for(j=0,k=m;j<k;)
if(a[b[(j+k)/2]]<a[i])
j=(j+k)/2+1;
else
k=(j+k)/2;
if(a[i]<a[b[j]])
b[j]=i;
}
for(g=0,s=f;s<=b[m]&&!g;s++)
{
for(e=k=0;b[k]<s;k++);
for(i=s;i<b[m];i++)
for(l=1,j=k;j<=m&&l;j++)
if(a[i]==a[b[j]])
l=0,e++;
if(e==b[m]-s&&e+1<p)
{
p=e+1;
if(b[1]<=s)
g=1;
}
}
f=b[m]+1;
}
printf("%d",p==5001?-1:p);
}
