Pagini recente » Cod sursa (job #1199419) | Borderou de evaluare (job #2425486) | Cod sursa (job #255394) | Cod sursa (job #494378) | Cod sursa (job #3182494)
#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];
map<int,int> m;
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;
continue;
}
if(v[i]>d[t])
{
++t;
d[t]=v[i];
e[t]=i;
h[i]=t;
if(t==k) break;
}
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;
}
}
t=v[e[k]]; j=e[k];
//fout<<t<<'\n';
for(i=e[k]-1;i>=1;--i)
{
//fout<<h[i]<<'\n';
if(v[i]>t) continue;
if(h[i]==h[j]-1)
{
t=v[i];
j=i;
if(h[i]==1)
{
fout<<e[k]-i+1;
return 0;
}
}
}
return 0;
}