Cod sursa(job #1679015)

Utilizator TudorVersoiuVersoiu Tudor Sorin TudorVersoiu Data 7 aprilie 2016 17:04:43
Problema Subsir crescator maximal Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.85 kb
#include <algorithm>
#include <cstdio>

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

int N, a[100003], best[100003], prec[100003], sol[100003], k;
int MAXX, pozmax;

int main() {
    fscanf(f, "%d", &N);

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

    for ( int i=1 ; i<=N ; i++ )
        for ( int j=0 ; j< i ; j++ )
            if ( a[j] < a[i] && best[j] + 1 > best[i] ) {
                best[i] = best[j] + 1;
                prec[i] = j;

                if ( best[i] > MAXX ) MAXX = best[i], pozmax = i;
            }
    fprintf(g, "%d\n", MAXX);

    sol[++k] = a[pozmax];
    do
    {
        pozmax = prec[pozmax];
        sol[++k] = a[pozmax];
    } while ( prec[pozmax] != 0 );

    std::reverse(sol+1, sol+k+1);
    for ( int i=1 ; i<=k ; i++ )
        fprintf(g, "%d ", sol[i]);
}