Pagini recente » Monitorul de evaluare | Cod sursa (job #317769) | Cod sursa (job #1423069) | Cod sursa (job #1152691) | Cod sursa (job #1754019)
#include <cstring>
#include <algorithm>
#define DIM 5005
using namespace std;
int n,nr,m,Min,Max;
int a[DIM],b[DIM],t[DIM];
int main(){
freopen("secv.in", "r", stdin);
freopen("secv.out", "w", stdout);
scanf("%d", &n);
for(int i=1;i<=n;++i)
scanf("%d", &a[i]),b[i]=a[i];
sort(b+1,b+n+1);
for(int i=1;i<=n;++i)
if(b[i]==b[i-1]) t[i]=nr;
else t[i]=++nr;
for(int i=1;i<=n;++i){
int mid,st=1,dr=n;
while(st<=dr){
mid=(st+dr)/2;
if(b[mid]==a[i])
break;
else if(b[mid]>a[i])
dr=mid-1;
else
st=mid+1;
}
a[i]=t[mid];
if(a[i]>Max)
Max=a[i];
}Min=DIM+1;
for(int i=1;i<=n;++i){
if(a[i]==1)
b[1]=1;
else if(b[a[i]-1]!=0)
b[a[i]]=b[a[i]-1];
if(a[i]==Max&&b[a[i]]!=0&&i-b[a[i]]+1<Min)
Min=i-b[a[i]+1];
}
if(Min==DIM+1)
{printf("-1");return 0;}
printf("%d", Min);
return 0;
}