Cod sursa(job #3318816)

Utilizator vladneaguVladneagu vladneagu Data 29 octombrie 2025 09:24:17
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.04 kb
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
const int maxn = 1e5 + 5;
int n, v[maxn];
int parent[maxn];
int main() {
    ifstream cin("scmax.in");
    ofstream cout("scmax.out");
    cin >> n;
    for (int i = 1; i <= n; i++)cin >> v[i];
    vector<int> lis;
    vector<int> lisIndex;
    for (int i = 1; i <= n; i++) {
        int x = v[i];
        auto it = lower_bound(lis.begin(), lis.end(), x);
        int pos = it - lis.begin();
        if (it == lis.end()) {
            lis.push_back(x);
            lisIndex.push_back(i);
        } else {
            *it = x;
            lisIndex[pos] = i;
        }
        if (pos > 0)
            parent[i] = lisIndex[pos - 1];
        else
            parent[i] = 0;
    }
    cout << lis.size() << '\n';
    vector<int> rsp;
    int act = lisIndex.back();
    while (act) {
        rsp.push_back(v[act]);
        act = parent[act];
    }
    reverse(rsp.begin(), rsp.end());
    for (auto x : rsp)
        cout << x << " ";
    return 0;
}