Pagini recente » Cod sursa (job #2275703) | Cod sursa (job #652889) | Cod sursa (job #238845) | Cod sursa (job #1635354) | Cod sursa (job #2794585)
#include <fstream>
using namespace std;
ifstream in("scmax.in");
ofstream out("scmax.out");
int n,v[100010],m[100010],nrm,r[100010],poz[100010];
int cb(int b,int e,int val)
{
if(e<b)
return e;
int a=(e+b)/2;
if(val>m[a])
return cb(a+1,e,val);
return cb(b,a-1,val);
}
int main()
{
in>>n;
for(int i=1;i<=n;++i)
in>>v[i];
for(int i=1;i<=n;++i)
{
int x=cb(1,nrm,v[i]);
m[x+1]=v[i];
poz[i]=x+1;
if(x+1>=nrm)
{
nrm=x+1;
}
}
out<<nrm<<'\n';
int x=nrm;
for(int i=n;i>=1;--i)
{
if(poz[i]==x)
{
--x;
r[1+x]=v[i];
}
}
for(int i=1;i<=nrm;++i)
out<<r[i]<<' ';
return 0;
}