Mai intai trebuie sa te autentifici.
Cod sursa(job #1754025)
Utilizator | Data | 7 septembrie 2016 14:32:33 | |
---|---|---|---|
Problema | Secv | Scor | 10 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 1.12 kb |
#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);b[0]=-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;
for(int i=1;i<=n;++i)
b[i]=0;
for(int i=1;i<=n;++i){
if(a[i]==1)
b[1]=i;
else if(b[a[i]-1]!=0)
b[a[i]]=b[a[i]-1];
if(a[i]==Max&&i-b[a[i]]+1<Min)
Min=i-b[a[i]]+1;
}
if(Min==DIM)
{printf("-1");return 0;}
printf("%d", Min);
return 0;
}