Pagini recente » Cod sursa (job #1445982) | Cod sursa (job #1866805) | Cod sursa (job #569696) | Cod sursa (job #3162709) | Cod sursa (job #1019572)
#include <fstream>
using namespace std;
ifstream in("scmax.in");
ofstream out("scmax.out");
const int N = 100010;
int v[N], u[N],pred[N];
int n,m,j;
void afis(int x){
if(x==0) return;
afis(pred[x]);
out<<v[x]<<" ";
}
int cautbinar(int x){
int rezultat=0;
for(int step = 1<<16; step>0 ; step>>=1){
if(v[u[rezultat+step]]<x && rezultat+step <= m){
rezultat += step;
}
}
return rezultat+1;
}
int main()
{
in>>n;
for(int i=1;i<=n;i++){
in>>v[i];
}
u[++m]=1;
for(int i=2;i<=n;i++){
j=cautbinar(v[i]);
pred[i]=u[j-1];
u[j]=i;
if(j==m+1) m++;
}
out<<m<<"\n";
afis(u[m]);
return 0;
}