Cod sursa(job #898151)

Utilizator cprogrammer1994Cprogrammer cprogrammer1994 Data 28 februarie 2013 07:44:02
Problema Subsir crescator maximal Scor 45
Compilator cpp Status done
Runda Arhiva educationala Marime 0.8 kb
#include <cstring>
#include <cstdio>
#include <cmath>

int n, m, p;
int a[100001];
int b[100001];
int c[100001];

FILE * in = fopen("scmax.in", "rt");
FILE * out = fopen("scmax.out", "wt");

void solve(int at, int val) {
    while (val) {
        if (b[at--] == val) {
            solve(at - 1, val - 1);
            fprintf(out, "%d ", a[at + 1]);
            return;
        }
    }
}

int main() {
    fscanf(in, "%d", &n);
    for (int i = 0; i < n; ++i) {
        fscanf(in, "%d", &a[i]);
    }
    for (int i = 0; i < n; ++i) {
        p = 0;
        while (a[i] > c[p] && p <= m) {
            ++p;
        }
        b[i] = p;
        c[p] = a[i];
        if (m < p) m = p;
    }

    fprintf(out, "%d\n", m);
    solve(n - 1, m);

    fclose(in);
    fclose(out);
}