Pagini recente » Cod sursa (job #215884) | Cod sursa (job #1551304) | Cod sursa (job #2385289) | Cod sursa (job #2779526) | Cod sursa (job #2302161)
#include <stdio.h>
#define NMAX 100000
int v[1 + NMAX], best[1 + NMAX], p[1 + NMAX], ans[1 + NMAX];
int cb ( int k, int m ) {
int pas = ( 1 << 16 ), i = 1;
while ( pas ) {
if ( i + pas <= m && v[p[i + pas]] < k )
i += pas;
pas /= 2;
}
return i;
}
int main() {
int n, l = 1;
int i;
FILE *fin = fopen ( "scmax.in", "r" );
fscanf ( fin, "%d", &n );
for ( i = 1; i <= n; i++ ) {
fscanf ( fin, "%d", &v[i] );
int j = cb ( v[i], l );
best[i] = p[j];
p[j + 1] = i;
l += ( l == j );
}
fclose ( fin );
int j = p[l];
for ( i = l - 1; i >= 1; i-- ) {
ans[i] = v[j];
j = best[j];
}
FILE *fout = fopen ( "scmax.out", "w" );
fprintf ( fout, "%d\n", l - 1 );
for ( i = 1; i < l; i++ )
fprintf ( fout, "%d ", ans[i] );
fclose ( fout );
return 0;
}