Cod sursa(job #714183)

Utilizator DSzprogDombi Szabolcs DSzprog Data 15 martie 2012 15:16:11
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.67 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, 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);
}