Cod sursa(job #3165546)

Utilizator octavian202Caracioni Octavian Luca octavian202 Data 6 noiembrie 2023 15:28:38
Problema Subsir crescator maximal Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.9 kb
#include <iostream>
#include <fstream>
#include <stack>

using namespace std;

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

const int NMAX = 1e5 + 5;
int v[NMAX], dp[NMAX], prv[NMAX];

int main() {

    int n, nmax = 0, last_ind = 0;
    fin >> n;
    for (int i = 1; i <= n; i++) {
        fin >> v[i];

        dp[i] = 1;
        prv[i] = 0;
        for (int j = 1; j < i; j++) {
            if (v[j] < v[i]) {
                if (dp[j] + 1 > dp[i]) {
                    dp[i] = dp[j] + 1;
                    prv[i] = j;
                }
            }
        }

        if (dp[i] > nmax) {
            nmax = dp[i];
            last_ind = i;
        }
    }

    stack<int> res;
    while (last_ind != 0) {
        res.push(v[last_ind]);
        last_ind = prv[last_ind];
    }

    fout << nmax << '\n';
    while (!res.empty()) {
        fout << res.top() << ' ';
        res.pop();
    }

    return 0;
}