Pagini recente » Cod sursa (job #2856086) | Cod sursa (job #1099283) | Cod sursa (job #41441) | Cod sursa (job #1843132) | Cod sursa (job #44594)
Cod sursa(job #44594)
#include<stdio.h>
#define maxn 5001
long v[maxn],nr[maxn],v1[maxn];
int n,NR;
void interc(int p, int q)
{int i,j,k,m;
long a[maxn];
m=(p+q)/2;
i=p; j=m+1;
k=0;
while (i<=m && j<=q)
if(v[i]>v[j]) a[++k]=v[i++];
else a[++k]=v[j++];
while (i<=m) a[++k]=v[i++];
while (j<=q) a[++k]=v[j++];
for(i=p,k=1;i<=q;i++,k++) v[i]=a[k];
}
void sort(int p, int q)
{if(p!=q) {sort(p,(p+q)/2); sort((p+q)/2+1,q);
interc(p,q);
}
}
int main ()
{freopen("secv.in","r",stdin);
scanf("%d\n",&n);
int i,j,k;
for(i=1;i<=n;i++) {scanf("%ld ",&v[i]); v1[i]=v[i];}
sort(1,n);
nr[1]=v[1];
NR=1;
for(i=2;i<=n;i++)
{while (v[i]==nr[NR] && i<=n) i++;
if(v[i]!=nr[NR]&& i<=n) nr[++NR]=v[i];
}
int MIN=5002;
for(i=n;i>=1&&i>=NR;i-- )
{if(v1[i]==nr[1]) {j=i-1;
k=2;
while (j>=1 && k<=NR){ if(v1[j]==nr[k]) k++;
j--;}
if(k==NR+1) if(MIN>(i-j)) MIN=i-j;
}
}
freopen("secv.out","w",stdout);
if(MIN<5002) printf("%d\n",MIN);
else printf("-1\n");
return 0;}