Pagini recente » Cod sursa (job #75179) | Cod sursa (job #3270995) | Cod sursa (job #1865467) | Cod sursa (job #1928067) | Cod sursa (job #1019573)
#include <fstream>
using namespace std;
ifstream in("scmax.in");
ofstream out("scmax.out");
const int N = 100010;
int maxstep=1;
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 = maxstep; step>0 ; step>>=1){
if(v[u[rezultat+step]]<x && rezultat+step <= m){
rezultat += step;
}
}
return rezultat+1;
}
int main()
{
in>>n;
while(maxstep*2<=n){
maxstep*=2;
}
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;
}