Cod sursa(job #3151995)

Utilizator maiaauUngureanu Maia maiaau Data 23 septembrie 2023 14:14:06
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.87 kb
#include <bits/stdc++.h>
using namespace std;

#define pb push_back

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

const int N = 1e5+3;

int n, v[N], prv[N], idx[N];
vector<int> dp;

int main()
{  
    f >> n;
    for (int i = 1; i <= n; i++){
        f >> v[i]; 
        auto it = lower_bound(dp.begin(), dp.end(), v[i]);
        if (it == dp.end()){
            int k = dp.size();
            dp.pb(v[i]);
            prv[i] = idx[k-1];
            idx[k] = i;
        }
        else {
            *it = v[i];
            int k = it - dp.begin();
            prv[i] = idx[k-1];
            idx[k] = i;
        }
    }
    int k = dp.size();
    g << k << '\n'; k--;
    
    int last = idx[k];
    stack<int> stk;
    while (k >= 0){
        stk.push(v[last]); 
        last = prv[last];
        k--;
    }
    while (!stk.empty()) {g << stk.top() << ' '; stk.pop();}

    return 0;
}