Cod sursa(job #2795201)

Utilizator domistnSatnoianu Dominic Ioan domistn Data 6 noiembrie 2021 09:42:19
Problema Subsir crescator maximal Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.75 kb
#include <iostream>
#include <stack>
#include <algorithm>

using namespace std;

const int NMAX = 100000;

int n, a[NMAX + 1], s[NMAX + 1], sl, p[NMAX + 1];

int main()
{
    freopen("scmax.in", "r", stdin);
    freopen("scmax.out", "w", stdout);
    scanf("%d", &n);
    for(int i = 1; i <= n; ++i) {
        scanf("%d", &a[i]);
        if(s[sl] < a[i]) {
            s[++sl] = a[i];
            p[i] = sl;
        } else {
            p[i] = (upper_bound(s + 1, s + sl + 1, a[i]) - s);
            s[p[i]] = a[i];
        }
    }
    printf("%d\n", sl);
    stack<int> ans;
    for(int i = n; i; --i)
        if(p[i] == sl)
            ans.push(a[i]), --sl;
    while(!ans.empty()) printf("%d ", ans.top()), ans.pop();
    return 0;
}