Cod sursa(job #1852092)
Utilizator | Cazacu Mihnea mihneacaz | Data | 20 ianuarie 2017 15:53:36 |
---|---|---|---|
Problema | Secv | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 1.37 kb |
#include<cstdio>
#include<algorithm>
using namespace std;
int v[5005],p[5005],t[5005],poz[5005];
int main()
{
freopen("secv.in","r",stdin);
freopen("secv.out","w",stdout);
int n,i,nr,m,st,dr,med,k,lmin,val,j;
scanf("%d",&n);
for(i=1; i<=n; i++)
{
scanf("%d",&v[i]);
t[i]=v[i];
}
sort(t+1,t+n+1);
nr=0;
v[n+1]=2000000001;
for(i=1; i<=n; i++)
if(t[i]!=t[i+1])
p[++nr]=t[i];
m=0;
for(i=1; i<=n; i++)
{
st=1;
dr=nr;
while(st<=dr)
{
med=(st+dr)/2;
if(p[med]==v[i])
{
v[i]=med;
break;
}
else
{
if(p[med]<v[i])
st=med+1;
else
dr=med-1;
}
}
if(v[i]==1)
poz[++m]=i;
}
k=nr;
lmin=n+1;
for(i=1; i<=m; i++)
{
st=poz[i];
val=2;
for(j=st; j<=n; j++)
{
if(v[j]==val)
val++;
if(val==k+1)
{
if(j-st+1<lmin)
lmin=j-st+1;
break;
}
}
}
if(lmin<n+1)
printf("%d\n",lmin);
else
printf("-1\n");
return 0;
}