Cod sursa(job #858667)

Utilizator gallexdAlex Gabor gallexd Data 19 ianuarie 2013 10:16:54
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include <cstdio>

#define LMAX 100000

int N,L;
int v[LMAX], s[LMAX], p[LMAX];

void citire() {
    scanf("%d", &N);
    for (int i=0; i<N; ++i)
        scanf("%d", &v[i]);
}

int binsrch(int x) {
    int step, i;
    for (step=1; step<L; step<<=1);
    for (i=L; step>0; step>>=1) {
        if (i-step>=0 && s[i-step]>=x)
            i-=step;
    }
    if (i==L) ++L;
    return i;
}

void scmax() {
    int poz;
    for (int i=0; i<N; ++i)  {
        poz = binsrch(v[i]);
        s[poz] = v[i];
        p[i] = poz;
    }
}

void elem(int i) {
    if (i<0) return;

    if (p[i]==L) {
        --L;
        elem(i-1);
        printf("%d ",v[i]);
    } else
    elem(i-1);
}

int main () {

    freopen("scmax.in","rt",stdin);
    freopen("scmax.out","wt",stdout);

    citire();
    scmax();
    printf("%d\n", L);
    --L;
    elem(N);

    return 0;
}