Pagini recente » Cod sursa (job #383737) | Cod sursa (job #1672296) | Cod sursa (job #2730529) | Cod sursa (job #1417015) | Cod sursa (job #639185)
Cod sursa(job #639185)
#include <iostream>
#include <fstream>
#define N 1100000
using namespace std;
int pred[N],a[N],v[N],lung;
ifstream in("scmax.in");
ofstream out("scmax.out");
void refa(int p)
{
if (pred[p])
refa(pred[p]);
out<<v[p]<<" ";
}
int caut(int p)
{
int i,pas=1<<16;
for(i=0;pas;pas>>=1)
if(i+pas<=lung && v[a[i+pas]]<p)
i+=pas;
return i+1;
}
int main()
{
int i,n,p;
in>>n;
for(i=1;i<=n;++i)
{
in>>v[i];
}
for(i=1;i<=n;++i)
{
p=caut(v[i]);
if(p>lung)
++lung;
a[p]=i;
pred[i]=a[p-1];
}
out<<lung<<"\n";
refa(a[lung]);
}