Pagini recente » Cod sursa (job #1693376) | Cod sursa (job #2162308) | Cod sursa (job #697929) | Cod sursa (job #2361184) | Cod sursa (job #2351880)
#include <iostream>
#include <fstream>
#define NMAX 100001
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int a[NMAX],sol[NMAX],C[NMAX],lgc,poz[NMAX],n;
int cb(int x);
int main()
{
int p,i,pz;
fin>>n;
for(i=1;i<=n;++i)
fin>>a[i];
C[++lgc]=a[1];
poz[1]=1;
for(i=2;i<=n;++i)
{
if(a[i]>C[lgc]) C[++lgc]=a[i],poz[i]=lgc;
else
{
pz=cb(a[i]);
C[pz]=a[i];
poz[i]=pz;
}
}
fout<<lgc<<"\n";
p=0;
for(i=n;i>=1;i--)
{
if(poz[i]==lgc) sol[++p]=a[i],lgc--;
}
for(i=p;i>=1;--i)
fout<<sol[i]<<" ";
return 0;
}
int cb(int x)
{
int st=0,dr=lgc+1,m;
while(dr>st+1)
{
m=(st+dr)/2;
if(C[m]>=x) dr=m;
else st=m;
}
return dr;
}