Cod sursa(job #2573914)

Utilizator IulianOleniucIulian Oleniuc IulianOleniuc Data 5 martie 2020 19:25:22
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda OJI 2020 Partea a II-a Marime 0.8 kb
#include <bits/stdc++.h>
using namespace std;

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

int main() {
    int n; fin >> n;
    vector<int> arr(n);
    for (int i = 0; i < n; i++)
        fin >> arr[i];

    vector<int> lis, pre(n);
    for (int i = 0; i < n; i++) {
        int it = lower_bound(lis.begin(), lis.end(), i, [&](int x, int y) {
            return arr[x] < arr[y];
        }) - lis.begin();
        if (it == (int) lis.size())
            lis.emplace_back();
        lis[it] = i;
        pre[i] = (it ? lis[it - 1] : -1);
    }

    vector<int> ans;
    for (int i = lis.back(); i != -1; i = pre[i])
        ans.push_back(arr[i]);

    fout << ans.size() << '\n';
    for (int i = ans.size() - 1; i >= 0; i--)
        fout << ans[i] << ' ';
    fout << '\n';

    fout.close();
    return 0;
}