Cod sursa(job #2207107)

Utilizator heisenbugDELETEME heisenbug Data 24 mai 2018 22:05:28
Problema Subsir crescator maximal Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 kb
#include <algorithm>
#include <fstream>
#include <stack>

// A is 1-indexed.
const size_t MAX_N = 100000 + 1;

int N, A[MAX_N], L[MAX_N], P[MAX_N];

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

    int N;
    fin >> N;

    for (int i = 1; i <= N; ++i)
        fin >> A[i];

    L[0] = P[0] = 0;
    int max = 0;

    for (int i = 1; i <= N; ++i) {
        int best = 0;
        for (int j = 1; j < i; ++j)
            if (L[best] < L[j] && A[j] < A[i])
                best = j;

        L[i] = L[best] + 1;
        P[i] = best;

        if (L[max] < L[i])
            max = i;
    }

    fout << L[max] << '\n';

    std::stack<int> s;
    while (max != 0) {
        s.push(max);
        max = P[max];
    }

    while (!s.empty()) {
        fout << A[s.top()] << ' ';
        s.pop();
    }

    return 0;
}