Cod sursa(job #2885731)

Utilizator ApostolIlieDanielApostol Daniel ApostolIlieDaniel Data 6 aprilie 2022 14:47:31
Problema Subsir crescator maximal Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.02 kb
#include <bits/stdc++.h>

using namespace std;

using ll = long long;
using pii = pair <int, int>;

void fastios() {
    freopen("scmax.in", "r", stdin);
    freopen("scmax.out", "w", stdout);
    ios::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);
}

const int maxn = 1e5, mxval = 2e9;
int dp[1 + maxn];
int a[1 + maxn];
int main() {
    fastios();

    int N;
    cin >> N;
    set <int> LIS;
    for (int i = 1; i <= N; i++) {
        cin >> a[i];
        auto it = LIS.lower_bound(a[i]);
        if (it != LIS.end())
            LIS.erase(it);
        LIS.insert(a[i]);
        dp[i] = LIS.size();
    }
    int lst = mxval + 1, wanted = LIS.size();
    vector <int> sol;
    for (int i = N; i > 0; i--) {
        if (dp[i] == wanted && lst > a[i]) {
            lst = a[i], wanted--;
            sol.push_back(a[i]);
        }
    }
    reverse(sol.begin(), sol.end());
    cout << sol.size() << "\n";
    for (int x : sol)
        cout << x << " ";
    cout << "\n";
    return 0;
}