Pagini recente » Cod sursa (job #2288320) | Cod sursa (job #1075022) | Cod sursa (job #2133692) | Cod sursa (job #2572181) | Cod sursa (job #2325381)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("scmax.in");
ofstream out("scmax.out");
const int N=1000001;
int n,secv,maxi=1,p,l,j=1,m=1,L=17;
int v[N],lung[N],pred[N],aux[N];
void sir(int p)
{
if(pred[p]!=0)
{
sir(pred[p]);
}
out<<v[p]<<" ";
}
int caut1(int v[], int n, int x)
{
int pas=1<<L;
int r=0;
while(pas!=0)
{
if(r+pas<=m && v[aux[r+pas]]<x)
r+=pas;
pas/=2;
}
return r;
}
int main()
{
in>>n;
for(int i=1; i<=n; ++i) in>>v[i];
m=1;
aux[1]=1;
pred[n]=-1;
for(int i=2; i<=n; ++i)
{
j=caut1(v,m,v[i]);
if(j==m) ++m;
pred[i]=aux[j];
aux[j+1]=i;
}
out<<m<<"\n";
sir(aux[m]);
return 0;
}