Pagini recente » Cod sursa (job #2176399) | Cod sursa (job #1929953) | Cod sursa (job #2194317) | Cod sursa (job #2776587) | Cod sursa (job #2627580)
#include <stdio.h>
int d[100000];
int cautbin( int n, int e ) {
int st = 0, dr = n, mij;
while ( dr - st > 1 ) {
mij = (st + dr) / 2;
if ( d[mij] > e ) {
dr = mij;
} else {
st = mij;
}
}
return st;
}
int main() {
FILE *fin = fopen( "scmax.in", "r" );
FILE *fout = fopen( "scmax.out", "w" );
int n, i, a, len, p;
fscanf( fin, "%d%d", &n, &a );
len = 0;
d[len++] = a;
for ( i = 0; i < n; ++i ) {
fscanf( fin, "%d", &a );
if ( a > d[len - 1] ) {
d[len++] = a;
} else {
p = cautbin( len, a );
if ( d[p] < a ) {
++p;
}
d[p] = a;
}
}
fprintf( fout, "%d\n", len );
for ( i = 0; i < len; ++i ) {
fprintf( fout, "%d ", d[i] );
}
fclose( fin );
fclose( fout );
return 0;
}