Pagini recente » Istoria paginii utilizator/domnii | Rating Chifan Eduard (Chifan_Edy) | Cod sursa (job #838052) | Rating urleteanu (octav1) | Cod sursa (job #165040)
Cod sursa(job #165040)
#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;
if(aaa<bbb) return -1;
if(aaa>bbb) return 1;
return 0;
}
int main(){
int n,v[5006],l[5006]={0},i,j,minp,ll=INF,ok[5006],max=0,minu=INF,w[5006],m=0,k;
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];
if(v[i]>max) max=v[i];
if(v[i]<minu) minu=v[i];
}
qsort(w,n+1,sizeof(w[0]),comp);
for(i=1;i<=n;i++)
if(w[i]!=w[m]) w[++m]=w[i];
for(i=1;i<=n;i++){
l[i]=i;
if(v[i]==max) ok[i]=1;
}
for(i=n-1;i>=1;i--){
minp=INF;
l[i]=INF;
for(j=1;j<=m;j++)
if(w[j]==v[i]) k=j;
for(j=i+1;j<=n;j++)
if(ok[j] && v[j]==w[k+1] && l[i]>l[j] && v[j]-v[i]<minp){
minp=v[j]-v[i];
l[i]=l[j];
ok[i]=ok[j];
}
if(l[i]==INF) l[i]=-1;
}
for(i=1;i<=n;i++)
if(ok[i] && v[i]==minu && ll>l[i]-i+1) ll=l[i]-i+1;
if(ll!=INF) printf("%d",ll);
else printf("-1");
return 0;
}