Cod sursa(job #2695330)

Utilizator teodorescunicolasteodorescu nicolas alexandru teodorescunicolas Data 12 ianuarie 2021 15:10:26
Problema Subsir crescator maximal Scor 100
Compilator c-64 Status done
Runda Arhiva educationala Marime 1.15 kb
#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;
}