Cod sursa(job #2023968)

Utilizator RaduDoStochitoiu Radu RaduDo Data 19 septembrie 2017 18:43:00
Problema Subsir crescator maximal Scor 65
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
// Example program
#include <iostream>
#include <fstream>
#include <string>

int constexpr MAXN = 100001;
int dp[MAXN], a[MAXN], back[MAXN];
int global_max, global_pos;

int main()
{   
    int n;
    std::ifstream in("scmax.in");
    std::ofstream out("scmax.out");

    in >> n;
    for (int i = 0; i < n; ++i)
        in >> a[i];

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

        if (dp[i] > global_max) {
            global_max = dp[i];
            global_pos = i;
        }
    }

    int curr = global_pos, curr_pos = 0;
    while (curr) {
        dp[curr_pos++] = curr;
        curr = back[curr];
    }

    out << global_max << "\n";
    for (int i = curr_pos - 1; i >= 0; --i) {
        out << a[dp[i]] << " ";
    }
    out << "\n";

    return 0;
}