Cod sursa(job #1438610)

Utilizator BLz0rDospra Cristian BLz0r Data 20 mai 2015 14:36:12
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.85 kb
#include <cstdio>
#include <algorithm>
using namespace std;

#define Nmax 100002

FILE *f = fopen ( "scmax.in", "r" );
FILE *g = fopen ( "scmax.out", "w" );

int v[Nmax], sol[Nmax], minim[Nmax], poz[Nmax];

int main(){

    int N, lg = 0;
    fscanf ( f, "%d", &N );

    for ( int i = 1; i <= N; ++i )
        fscanf ( f, "%d", &v[i] );

    for ( int i = 1; i <= N; ++i ){
        int p = upper_bound ( minim + 1, minim + lg + 1, v[i] ) - minim;

        if ( minim[p-1] == v[i] )
            p--;

        minim[p] = v[i];
        poz[i] = p;
        lg = max ( lg, p );
    }

    fprintf ( g, "%d\n", lg );

    int lgg = lg;

    for ( int i = N; i >= 1 && lg; --i )
        if ( poz[i] == lg )
            sol[lg--] = v[i];

    for ( int i = 1; i <= lgg; ++i )
        fprintf ( g, "%d ", sol[i] );

    return 0;
}