Cod sursa(job #1160681)

Utilizator cbanu96Banu Cristian cbanu96 Data 30 martie 2014 18:25:22
Problema Subsir crescator maximal Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.8 kb
#include <cstdio>

using namespace std;

#define FILEIN "scmax.in"
#define FILEOUT "scmax.out"
#define NMAX 100005

int A[NMAX], D[NMAX], Pre[NMAX], Sol[NMAX], N;

int main() {
    freopen(FILEIN, "r", stdin);
    freopen(FILEOUT, "w", stdout);

    scanf("%d", &N);
    for ( int i = 1; i <= N; i++ ) scanf("%d", &A[i]);

    int MaxI = 0;
    for ( int i = 1; i <= N; i++ ) {
        D[i] = 1;
        for ( int j = 0; j < i; j++ ) {
            if (A[j] < A[i] && D[j] + 1 > D[i])
                D[i] = D[j] + 1, Pre[i] = j;
        }
        if (D[i] > D[MaxI])
            MaxI = i;
    }

    int k = 0;
    for ( int i = MaxI; i; i = Pre[i]) {
        Sol[++k] = A[i];
    }

    printf("%d\n", D[MaxI]);
    for ( int i = k; i; i-- ) {
        printf("%d ", Sol[i]);
    }
    printf("\n");

    return 0;
}