Cod sursa(job #2409711)

Utilizator osiaccrCristian Osiac osiaccr Data 19 aprilie 2019 12:48:08
Problema Subsir crescator maximal Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.95 kb
#include <bits/stdc++.h>
#define DEF 100010

using namespace std;

ifstream fin ("scmax.in");
ofstream fout ("scmax.out");

int n, V[DEF], Dp[DEF], maxim, Pred[DEF], posMaxim;

vector < int > Sol;

int main () {

    fin >> n;

    for (int i = 1; i <= n; ++ i) {
        fin >> V[i];
    }


    Dp[1] = 1;
    for (int i = 2; i <= n; ++ i) {
        Dp[i] = 1;
        for (int j = 1; j < i; ++ j) {
            if (V[j] < V[i] and Dp[j] + 1 > Dp[i]) {
                Dp[i] = Dp[j] + 1;
                Pred[i] = j;
            }
        }
    }

    for (int i = 1; i <= n; ++ i) {
        if (maxim < Dp[i]) {
            maxim = Dp[i];
            posMaxim = i;
        }
    }

    fout << maxim << "\n";

    while (posMaxim) {
        Sol.push_back (V[posMaxim]);
        posMaxim = Pred[posMaxim];
    }

    for (int i = Sol.size () - 1; i >= 0; -- i) {
        fout << Sol[i] << " ";
    }

    return 0;
}