Cod sursa(job #655076)
#include <fstream>
#define l 100005
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
long long A[l][2],n,i,v[l],k,s,e,poz,W[l],we;
int bag(int j,int p)
{
if (v[j]<v[p]) {
if (A[p][0]==0) A[p][0]=j;
else bag(j,A[p][0]);
}
if (v[j]>=v[p]) {
if (A[p][1]==0) A[p][1]=j;
else bag(j,A[p][1]);
}
}
int caut (int x,int p)
{
if (v[p]<v[i]) poz=p;
if (x<v[p]&&A[p][0]!=0) caut (x,A[p][0]);
if (x>v[p]&&A[p][1]!=0) caut (x,A[p][1]);
}
int main()
{
f>>n;
for(i=1; i<=n; i++) {
f>>v[i];
caut(v[i],0);
if (v[poz]<v[i]) W[i]=W[poz];
W[i]++;
bag(i,0);
we=max(W[i],we);
}
g<<we<<'\n';
f.close();
g.close();
return 0;
}