Cod sursa(job #3263240)

Utilizator andu9andu nita andu9 Data 13 decembrie 2024 22:48:35
Problema Subsir crescator maximal Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.03 kb
#include <fstream>
#include <vector>
#include <climits>
#include <algorithm>

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

int main () {
    int n; fin >> n;
    std::vector<int> v(n);
    for (int i = 0; i < n; i += 1)
        fin >> v[i];


    std::vector<int> index(n, -1), prev(n, -1);
    std::vector<int> d(n + 1, INT_MAX); d[0] = INT_MIN;

    for (int i = 0; i < n; i += 1) {
        int l = std::upper_bound (d.begin (), d.end (), v[i]) - d.begin ();
        
        d[l] = v[i]; index[l] = i;
        prev[i] = (l > 0 ? index[l - 1] : -1);
        
    }


    int Size, parent;
    for (int l = n; l >= 1; l -= 1) {
        if (d[l] != INT_MAX) {
            Size = l, parent = index[l];
            break;
        }
    }

    fout << Size << '\n';

    std::vector<int> seq;

    while (parent != -1) {
        seq.emplace_back (v[parent]);
        parent = prev[parent];
    }

    for (int i = seq.size () - 1; i >= 0; i -= 1)
        fout << seq[i] << ' ';
    return 0;
}