Pagini recente » Cod sursa (job #678430) | Cod sursa (job #1042548) | Cod sursa (job #3225084) | Cod sursa (job #2667614) | Cod sursa (job #2486041)
#include <fstream>
#define INF 2000000000
using namespace std;
ifstream in("scmax.in");
ofstream out("scmax.out");
int n,v[100001],d[100001],k,r,poz[100001];
int cauta(int p,int r,int a)
{ int m=(p+r)/2,x=0;
while(p<=r)
{ if(d[m]<a && x<d[m])
x=m,p=m+1;
else
r=m-1;
m=(p+r)/2;
}
return x;
}
int main()
{ in>>n;
for(int i=1;i<=n;i++)
in>>v[i];
for(int i=1;i<=n;i++)
d[i]=INF;
for(int i=1;i<=n;i++)
{ int x=cauta(1,r,v[i]);
poz[i]=x+1;
d[x+1]=v[i];
if(x+1>k)
{ k=x+1;
r=i;
}
}
out<<k<<'\n';
int a=v[r],x=k;
d[x]=a;
for(int i=r;i>0;i--)
{ if(v[i]>=a || poz[i]<x-1)
continue;
d[--x]=v[i];
a=v[i];
}
for(int i=1;i<=k;i++)
out<<d[i]<<" ";
in.close();
out.close();
return 0;
}