Cod sursa(job #164867)

Utilizator ciprianfFarcasanu Alexandru Ciprian ciprianf Data 24 martie 2008 21:43:31
Problema Secv Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.78 kb
#include <stdio.h>
#include <stdlib.h>
#define INF 2000000000
int comp(const void*a,const void*b){
	int *aa=(int*)a,*bb=(int*)b;
	int aaa=*aa,bbb=*bb;
	return (aaa-bbb);
}
int main(){
	int n,v[5001],w[5001],i,j,k=0,m=0,ok,l=INF,st,fin;
	freopen("secv.in","r",stdin);
	freopen("secv.out","w",stdout);
	scanf("%d",&n);
	for(i=1;i<=n;i++){
		scanf("%d",&v[i]);
		w[i]=v[i];
	}
	qsort(w,n+1,sizeof(w[0]),comp);
	for(i=1;i<=n;i++)
		if(w[i]!=w[i-1]) w[++m]=w[i];
	for(i=1;i<=n;i++)
		if(v[i]==w[1]){
			ok=0;
			k=2;
			st=i;
			for(j=i+1;j<=n;j++){
				if(v[j]==w[k])
					k++;
				if(k==m+1) { ok=1; fin=j; break; }
			}
			if(ok && fin-st+1<l)
				l=fin-st+1;
		}
	if(m==1) { printf("1"); return 0; }
	if(l!=INF) printf("%d",l);
	else printf("-1");
	return 0;
}