Pagini recente » Cod sursa (job #2744047) | Cod sursa (job #1361164) | Cod sursa (job #391567) | Cod sursa (job #1070386) | Cod sursa (job #1334157)
#include<cstdio>
#include<algorithm>
#define Nmax 5005
#define Inf 1000000000
using namespace std;
int n,i,j,p,q,nr;
int v[Nmax],w[Nmax],x[Nmax],a[Nmax];
int poz[Nmax];
int sol;
int cb(int val)
{
int st=1,dr=x[0],m;
while (st<=dr)
{
m=(st+dr)/2;
if (x[m]==val) return m;
if (x[m]<val) st=m+1;
else dr=m-1;
}
return 0;
}
int main()
{
freopen("secv.in","r",stdin);
freopen("secv.out","w",stdout);
scanf("%d",&n); w[0]=-1;
sol=Inf; a[0]=Inf;
for (i=1;i<=n;i++)
scanf("%d",&v[i]),w[i]=v[i],a[i]=Inf;
sort(w+1,w+n+1);
for (i=1;i<=n;i++)
if (w[i]!=w[i-1])
x[++x[0]]=w[i];
for (i=1;i<=n;i++)
{
p=cb(v[i]);
if (p==1) a[i]=1;
else if (a[poz[p-1]]!=Inf)
a[i]=a[poz[p-1]]+i-poz[p-1];
if (v[i]==x[x[0]])
sol=min(sol,a[i]);
poz[p]=i;
}
if (sol==Inf) printf("%d",-1);
else printf("%d",sol);
return 0;
}