Cod sursa(job #2856409)

Utilizator vansJos da pa perete vans Data 23 februarie 2022 20:14:39
Problema Subsir crescator maximal Scor 65
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.75 kb
#include <iostream>

using namespace std;

const int NMAX = 1e5;

int n, a[NMAX + 1], dp[NMAX + 1], dpl;

inline int cb(const int Q) {
    int st = 1, dr = dpl, mij, ans;
    while(st <= dr) {
        mij = (st + dr) / 2;
        if(a[dp[mij]] >= a[Q]) dr = mij - 1, ans = mij;
        else st = mij + 1;
    }
    return ans;
}

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]);
    dp[dpl = 1] = 1;
    for(int i = 2; i <= n; ++i)
        if(a[dp[dpl]] < a[i]) dp[++dpl] = i;
        else dp[cb(i)] = i;
    printf("%d\n", dpl);
    for(int i = 1; i <= dpl; ++i)
        printf("%d ", a[dp[i]]);
    return 0;
}