Pagini recente » Cod sursa (job #1757719) | Cod sursa (job #1568517) | Cod sursa (job #1890356) | Cod sursa (job #1524220) | Cod sursa (job #1094996)
#include<iostream>
#include<fstream>
using namespace std;
fstream in ( "scmax.in" , ios::in ),
out( "scmax.out", ios::out);
int u[100001], v[100001], pred[100001], n, m;
int bs(int x){
int i=0, pas = 1<<16;
while( pas != 0 ){
if( (i+pas<=m) && (v[u[i+pas]]<x)){
i+=pas;
}
pas/=2;
}
return i;
}
void refac( int p ){
if( pred[p] != 0 )
refac( pred[ p ]);
out << v[ p ] <<' ';
}
int main(){
int j;
in >>n;
for(int i=1; i<=n; i++){
in >> v[i];
}
u[++m] = 1;
for(int i=2; i<=n; i++){
j = bs( v[i] );
if( j==m )
++m;
u[j+1] = i;
pred[i] = u[j];
}
out << m <<'\n';
refac( u[m] );
return 0;
}