Pagini recente » Cod sursa (job #1349234) | Borderou de evaluare (job #1036582) | Monitorul de evaluare | Cod sursa (job #2855104) | Cod sursa (job #987622)
Cod sursa(job #987622)
#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);
}