Cod sursa(job #794143)

Utilizator gallexdAlex Gabor gallexd Data 5 octombrie 2012 18:56:26
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.8 kb
#include <cstdio>
#define LMAX 100010

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


void chk(int k, int x) {
    int i, step;
    for (step=1; step<lg; step<<=1);
    for (i=lg-1; step; step>>=1)
        if (i-step>=0 && s[i-step]>=x)
            i-=step;
    if (s[i]>=x) {
        s[i]=x;
        p[k]=i;
    } else {
        s[lg]=x;
        p[k]=lg++;
    }
}

void afisare(int k) {
    if (k<0) return;
    if (lg==p[k]) {
        --lg;
        afisare(k-1);
        printf("%d ", v[k]);
    } else afisare(k-1);
}

int main () {

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

    scanf("%d", &N);
    for (int i=0; i<N; ++i) {
        scanf("%d", &v[i]);
        chk(i,v[i]);
    }
    printf("%d\n",lg--);
    afisare(N-1);

    return 0;
}