Cod sursa(job #3290949)

Utilizator lucamLuca Mazilescu lucam Data 2 aprilie 2025 13:28:59
Problema Subsir crescator maximal Scor 65
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.73 kb
#include <bits/stdc++.h>
using namespace std;

int n;
vector<int> v;
vector<int> dp;

ifstream fin("scmax.in");
ofstream fout("scmax.out");
#define cin fin
#define cout fout

int main() {
    cin >> n;
    v.resize(n);
    dp.resize(n + 1);
    for (auto &x : v) {
        cin >> x;
    }
    int inf = 2e9 + 2;
    fill(dp.begin() + 1, dp.end(), inf);
    dp[0] = -inf;
    dp[1] = v[0];
    int lmax = 1;
    for (int i = 1; i < n; ++i) {
        int j = n
            - (upper_bound(dp.rbegin(), dp.rend(), v[i], greater{})
               - dp.rbegin());
        dp[j + 1] = v[i];
        lmax = max(lmax, j + 1);
    }
    cout << lmax << "\n";
    for (int i = 1; i <= lmax; ++i) {
        cout << dp[i] << " ";
    }
    cout << endl;
}