Cod sursa(job #2522616)

Utilizator CristyXtremeSimion Cristian CristyXtreme Data 12 ianuarie 2020 18:45:07
Problema Subsir crescator maximal Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.96 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

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

int main() {
    int n;
    in >> n;
    vector <int> a(n);
    vector <pair <int, int> > dp(n, {1, -1});
    for (int i = 0; i < n; i++) {
        in >> a[i];
    }

    for (int i = 1; i < n; i++) {
        for (int j = 0; j < i; j++) {
            if (a[j] < a[i] && dp[j].first + 1 > dp[i].first) {
                dp[i] = {dp[j].first + 1, j};
            }
        }
    }

    int idx_sol = 0;
    for (int i = 1; i < n; i++) {
        if (dp[i].first > dp[idx_sol].first)
            idx_sol = i;
    }

    vector <int> sol;
    int curr_idx = idx_sol;
    while (curr_idx != -1) {
        sol.push_back(a[curr_idx]);
        curr_idx = dp[curr_idx].second;
    }
    out << dp[idx_sol].first << '\n';
    for (int i = sol.size() - 1; i >= 0; i--) {
        out << sol[i] << ' ';
    }
    return 0;
}