Cod sursa(job #898147)

Utilizator cprogrammer1994Cprogrammer cprogrammer1994 Data 28 februarie 2013 07:27:47
Problema Subsir crescator maximal Scor 65
Compilator cpp Status done
Runda Arhiva educationala Marime 0.85 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");

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);
    int count = m;
    int last = b[n - 1] + 1;
    for (int i = n - 1; i >= 0; --i) {
    	if (b[i] == m && a[i] < last) {
    		last = a[i];
    		c[m] = a[i];
    		m = m - 1;
    	}
    }

    for (int i = 1; i <= count; ++i) {
    	fprintf(out, "%d ", c[i]);
    }

    fclose(in);
    fclose(out);
}