Cod sursa(job #1857956)

Utilizator FlorinHajaFlorin Gabriel Haja FlorinHaja Data 26 ianuarie 2017 21:19:58
Problema Subsir crescator maximal Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.75 kb
#include <fstream>

using namespace std;

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

int a[100005], i, j, n, lm, x;
int bst[100005], pb[100005], sol[100005];

int cb(int x) {
    int st = 1, dr = lm, m;
    while (st <= dr) {
        m = (st+dr)/2;
        if (x >= bst[i])
            dr = m-1;
        else st = m+1;
    }
    return st;
}

int main() {
    f >> n;
    for (i = 1; i <= n; i++) {
        f >> a[i];
        if (a[i] > bst[lm])
            x = ++lm;
        else x = cb(a[i]);
        bst[x] = a[i];
        pb[i] = x;
    }
    g << lm << '\n';
    for (i = n; i >= 1;i--)
        if (pb[i]==lm)
            sol[++j] = a[i],lm--;
    for (i = j;i>=1;i--)
        g << sol[i] << ' ';
    return 0;
}