Pagini recente » Cod sursa (job #3131651) | Cod sursa (job #1228272) | Cod sursa (job #629588) | Cod sursa (job #1421722) | Cod sursa (job #1438610)
#include <cstdio>
#include <algorithm>
using namespace std;
#define Nmax 100002
FILE *f = fopen ( "scmax.in", "r" );
FILE *g = fopen ( "scmax.out", "w" );
int v[Nmax], sol[Nmax], minim[Nmax], poz[Nmax];
int main(){
int N, lg = 0;
fscanf ( f, "%d", &N );
for ( int i = 1; i <= N; ++i )
fscanf ( f, "%d", &v[i] );
for ( int i = 1; i <= N; ++i ){
int p = upper_bound ( minim + 1, minim + lg + 1, v[i] ) - minim;
if ( minim[p-1] == v[i] )
p--;
minim[p] = v[i];
poz[i] = p;
lg = max ( lg, p );
}
fprintf ( g, "%d\n", lg );
int lgg = lg;
for ( int i = N; i >= 1 && lg; --i )
if ( poz[i] == lg )
sol[lg--] = v[i];
for ( int i = 1; i <= lgg; ++i )
fprintf ( g, "%d ", sol[i] );
return 0;
}