Pagini recente » Cod sursa (job #693902) | Cod sursa (job #2559399) | Cod sursa (job #3183411) | Cod sursa (job #1518782) | Cod sursa (job #3182503)
#include <bits/stdc++.h>
#define N 5005
using namespace std;
ifstream fin("secv.in");
ofstream fout("secv.out");
int n,i,j,k,t,st,dr,mid,sol,l,v[N],d[N],e[N],h[N],mn=2e9;
map<int,int> m;
int vrf()
{
int i;
if(k==1) return 1;
t=v[e[k]]; j=e[k];
for(i=e[k]-1;i>=1;--i)
{
if(v[i]>t) continue;
if(h[i]==h[j]-1)
{
t=v[i];
j=i;
if(h[i]==1)
{
return e[k]-i+1;
}
}
}
return 2e9;
}
int main()
{
fin>>n;
for(i=1;i<=n;++i)
{
fin>>v[i];
if(!m[v[i]])
{
m[v[i]]=1;
++k;
}
}
for(i=1;i<=n;++i)
{
if(i==1)
{
t=1;
d[1]=v[1];
e[1]=1;
h[1]=1;
if(1==k) mn=min(mn,vrf());
continue;
}
if(v[i]>d[t])
{
++t;
d[t]=v[i];
e[t]=i;
h[i]=t;
if(t==k) mn=min(mn,vrf());
}
else
{
st=1; dr=t; sol=0;
while(st<=dr)
{
mid=(st+dr)>>1;
if(d[mid]<v[i]) {st=mid+1;}
else {sol=mid; dr=mid-1;}
}
h[i]=sol;
d[sol]=v[i];
e[sol]=i;
if(sol==k) mn=min(mn,vrf());
}
}
if(mn==2e9) fout<<-1;
else fout<<mn;
return 0;
}