Pagini recente » Cod sursa (job #547764) | Cod sursa (job #2644080) | Cod sursa (job #2247887) | Cod sursa (job #2009563) | Cod sursa (job #1691738)
# include <stdio.h>
# include <stdlib.h>
# define MAX_N 1000000
int l[MAX_N + 1];
int drum[MAX_N + 1];
int src( int val, int * v, int len ) {
int pos, pas;
pos = -1;
for ( pas = 30; pas >= 0; pas -- ) {
if ( pos + ( 1 << pas ) < len && v[pos + ( 1 << pas )] < val )
pos += ( 1 << pas );
}
return pos;
}
int main() {
FILE *fin = fopen( "scmax.in", "r" ), *fout = fopen( "scmax.out", "w" );
int n, m, i, j, nr;
fscanf( fin, "%d", &n );
m = 1;
for ( i = 0; i < n; i ++ ) {
fscanf( fin, "%d", &nr );
j = src( nr, l, m );
l[j + 1] = nr;
if ( j + 1 == m ) {
drum[m] = nr;
m ++;
}
}
fprintf( fout, "%d\n", m - 1 );
for ( i = 1; i < m; i ++ )
fprintf( fout, "%d ", drum[i] );
fclose( fin );
fclose( fout );
return 0;
}