Cod sursa(job #3352708)

Utilizator OProblemaInFiecareZiIulian Caloianu OProblemaInFiecareZi Data 30 aprilie 2026 18:31:33
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.99 kb
#include <bits/stdc++.h>
using namespace std;

int main() {
    ifstream f("scmax.in");
    ofstream g("scmax.out");

    int n;
    f >> n;

    vector<long long> a(n);
    for (int i = 0; i < n; i++) f >> a[i];

    vector<long long> t;
    vector<int> p, pr(n, -1), id;

    for (int i = 0; i < n; i++) {
        long long x = a[i];

        int l = 0, r = t.size();
        while (l < r) {
            int m = (l + r) / 2;
            if (t[m] < x) l = m + 1;
            else r = m;
        }

        if (l == (int)t.size()) {
            t.push_back(x);
            p.push_back(i);
        } else {
            t[l] = x;
            p[l] = i;
        }

        id.push_back(l);

        if (l) pr[i] = p[l - 1];
    }

    int k = t.size();
    g << k << "\n";

    vector<long long> v(k);
    int c = p[k - 1];

    for (int i = k - 1; i >= 0; i--) {
        v[i] = a[c];
        c = pr[c];
    }

    for (auto x : v) g << x << " ";

    return 0;
}