Cod sursa(job #1822474)

Utilizator EuAlexOtaku Hikikomori EuAlex Data 4 decembrie 2016 22:42:24
Problema Subsir crescator maximal Scor 65
Compilator cpp Status done
Runda Arhiva educationala Marime 0.8 kb
#include <cstdio>

using namespace std;

int v[100005];

int bs(int st, int dr, int val) {
    int last = 0, med;
    while(st <= dr) {
        med = (st + dr) / 2;
        if(v[med] < val) {
            last = med;
            st = med + 1;
        } else {
            dr = med - 1;
        }
    }
    return last + 1;
}

int main() {
    freopen("scmax.in", "r", stdin);
    freopen("scmax.out", "w", stdout);

    int n, a, st, dr, aux;
    scanf("%d", &n);

    st = 1;
    dr = 0;

    for(int i = 1; i <= n; ++ i) {
        scanf("%d", &a);
        aux = bs(st, dr, a);
        if(aux == dr + 1) {
            ++ dr;
        }
        v[aux] = a;
    }

    printf("%d\n", dr);

    for(int i = 1; i <= dr; ++ i) {
        printf("%d ", v[i]);
    }

    return 0;
}