Pagini recente » Cod sursa (job #1206365) | Cod sursa (job #2348865) | Cod sursa (job #1151919) | Cod sursa (job #2456833) | Cod sursa (job #821798)
Cod sursa(job #821798)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in ("scmax.in");
ofstream out("scmax.out");
int const N=100005;
int v[N],ult[N],pred[N],n,u;
int cautb (int x)
{
int poz=0;
for(int i=1<<30;i>0;i>>=1)
if((poz+i<=u)&&(v[ult[i+poz]]<x))
poz+=i;
return poz;
}
void afis(int x)
{
if(x==0) return;
afis(pred[x]);
out<<v[x]<<" ";
}
int main()
{
in>>n;
for(int i=1;i<=n;i++)
{
in>>v[i];
int p = cautb(v[i]);
ult[p+1]=i;
pred[i]=ult[p];
if(p==u) u++;
}
out<<u<<"\n";
/*for(int i=1;i<=u;i++)
out<<v[ult[i]]<<" ";
out<<"\n";*/
afis(ult[u]);
return 0;
}