Pagini recente » Cod sursa (job #1599794) | Cod sursa (job #3210842) | Cod sursa (job #2181319) | Cod sursa (job #2774078) | Cod sursa (job #388559)
Cod sursa(job #388559)
#include <stdio.h>
struct nod
{
int poz;
nod *adr;
};
nod *u,*p;
int n,v[5005],i,s[5005],x,j,a,b,mid,min,poz[5005],din[5005][5005],len;
int sfarsit(int elem,int pos)
{
int ret;
if (din[elem][pos])
return din[elem][pos];
while (pos<=n && v[pos]!=s[elem])
++pos;
if (v[pos]==s[elem])
if (elem==x)
ret=pos;
else
ret=sfarsit(elem+1,pos+1);
else
ret=-1;
din[elem][pos]=ret;
return ret;
}
int main()
{
freopen("secv.in","r",stdin);
freopen("secv.out","w",stdout);
scanf("%d",&n);
min=2100000000;
for (i=1;i<=n;++i)
{
scanf("%d",&v[i]);
a=1;
b=x;
while (a<=b)
{
mid=a+(b-a)/2;
if (v[i]<=s[mid])
b=mid-1;
else
a=mid+1;
}
if (s[b+1]!=v[i] || (x==0 && v[i]==0))
{
for (j=x;j>b;--j)
s[j+1]=s[j];
s[b+1]=v[i];
++x;
}
if (v[i]<min)
{
min=v[i];
p=new nod;
p->poz=i;
p->adr=NULL;
}
else
if (v[i]==min)
{
u=new nod;
u->poz=i;
u->adr=p;
p=u;
}
}
min=6000;
for (u=p;u!=NULL;u=u->adr)
{
len=sfarsit(2,u->poz+1);
if (len>-1)
{
len=len-u->poz+1;
if (len<min)
min=len;
}
}
if (min<6000)
printf("%d",min);
else
printf("%d",-1);
return 0;
}