Pagini recente » Cod sursa (job #419774) | Cod sursa (job #644988) | Cod sursa (job #2923332) | Cod sursa (job #2223380) | Cod sursa (job #2695330)
#include <stdio.h>
#define NMAXX 100000
FILE *fin, *fout;
int v[NMAXX], precedent[NMAXX], ind[NMAXX];
void write( int poz ) {
if ( poz != -1 ) {
write( precedent[poz] );
fprintf( fout, "%d ", v[poz] );
}
}
int cautare_binara( int e, int dr ) {
int i, step, st = 0;
i = st - 1;
step = 1 << 16;
while ( step ) {
if ( i + step <= dr && v[ind[i + step]] < e )
i += step;
step >>= 1;
}
return i;
}
int main() {
int n, i, lung, maxx;
fin = fopen( "scmax.in", "r" );
fout = fopen( "scmax.out", "w" );
fscanf( fin, "%d", &n );
for ( i = 0; i < n; i++ ) {
fscanf( fin, "%d", &v[i] );
}
maxx = 0;
for ( i = 0; i < n; i++ ) {
lung = cautare_binara( v[i], maxx - 1 ) + 1;
ind[lung] = i;
if ( lung > 0 ) {
precedent[i] = ind[lung - 1];
} else {
precedent[i] = -1;
}
if ( maxx < lung + 1 ) {
maxx = lung + 1;
}
}
fprintf( fout, "%d\n", maxx );
write( ind[maxx - 1] );
fclose( fin );
fclose( fout );
return 0;
}