Cod sursa(job #44594)

Utilizator lucibitLucian Onea lucibit Data 31 martie 2007 16:03:56
Problema Secv Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#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;}