Cod sursa(job #332478)

Utilizator cotofanaCotofana Cristian cotofana Data 18 iulie 2009 00:10:31
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.69 kb
#include <cstdio>
#include <algorithm>
#define MAXN 100001

using namespace std;

int n, v[MAXN], m[MAXN], p[MAXN], ct, sol[MAXN];

void print(int i, int l) {
	if (!l) return;
	print(p[i], l-1);
	printf("%d ", v[i]);
}

int main() {
	int i, j, l;
	freopen("scmax.in", "r", stdin);
	freopen("scmax.out", "w", stdout);
	
	scanf("%d\n", &n);
	for (i=1; i<=n; ++i) scanf("%d\n", &v[i]);

	l=1;
	m[1]=1;
	for (i=2; i<=n; ++i) {
		for (j=l; j>=0; --j) {
			if (v[m[j]]<v[i]) {
				if (!m[j+1])
					m[j+1]=i,
					++l;
				else if (v[m[j+1]]>v[i]) m[j+1]=i;
			
				p[i]=m[j];
				break;
			}
		}
	}
	
	printf("%d\n", l);
	print(m[l], l);
	printf("\n");
	
	return 0;
}