Cod sursa(job #1549128)

Utilizator Burbon13Burbon13 Burbon13 Data 11 decembrie 2015 22:57:16
Problema Subsir crescator maximal Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include <fstream>

using namespace std;

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

const int nmx = 100002;

int n,v[nmx],sol[nmx],l[nmx];

void citire() {
    f >> n;
    for(int i = 1; i <= n; ++i)
        f >> v[i];
}

void afish(int pos, int k){
    if(not pos)
        return;
    if(l[pos] == k){
        afish(pos-1,k-1);
        o << v[pos] << " ";
    }
    else
        afish(pos-1,k);
}

void dinamica() {
    int k = 0;
    for(int i = 1; i <= n; ++i) {
        if(v[i] > sol[k]) {
            sol[++k] = v[i];
            l[i] = k;
        } else {
            int st = 1, dr = k, m, pos = k;
            while(st <= dr) {
                m = st + (dr - st) / 2;
                if(v[i] > sol[m])
                    st = m + 1;
                else {
                    dr = m - 1;
                    pos = m;
                }
            }
            sol[m] = v[i];
            l[i] = pos;
        }
    }
    o << k << "\n";
    afish(n,k);
}

int main() {
    citire();
    dinamica();
    return 0;
}