Cod sursa(job #1691738)

Utilizator Tiberiu02Tiberiu Musat Tiberiu02 Data 19 aprilie 2016 12:13:17
Problema Subsir crescator maximal Scor 60
Compilator c Status done
Runda Arhiva educationala Marime 0.86 kb
# 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;
}