Pagini recente » Cod sursa (job #2513709) | Cod sursa (job #1893187) | Cod sursa (job #2729452) | Cod sursa (job #1071833) | Cod sursa (job #987627)
Cod sursa(job #987627)
#include<cstdio>
int a[5001],i,j,k,m,n,b[5001],c[5001],s,e,p=5001,l,f=1,g,h;
int main()
{
freopen("secv.in","r",stdin),
freopen("secv.out","w",stdout),
scanf("%d",&n),a[0]=-1;
for(i=1;i<=n;i++)
scanf("%d",a+i);
while(1)
{
if(f>=n||(g==h&&g))
break;
for(m=b[0]=0,i=f;i<=n;i++)
{
if(a[b[m]]<a[i])
c[i]=b[m],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]])
{
if(j)
c[i]=b[j-1];
b[j]=i;
}
}
for(i=m,j=b[m];i--;j=c[j])
b[i]=j;
for(g=0,s=f;s<b[m-1]&&!g;s++)
{
for(e=k=0;b[k]<s;k++);
for(i=s;i<b[m-1];i++)
for(l=1,j=k;j<m&&l;j++)
if(a[i]==a[b[j]])
l=0,e++;
if(e==b[m-1]-s&&e+1<p)
{
p=e+1;
if(b[0]<=s)
g=1;
}
}
f=b[m-1]+1,h++;
}
printf("%d",p==5001?-1:p);
}