Cod sursa(job #1446355)

Utilizator tudorcomanTudor Coman tudorcoman Data 1 iunie 2015 16:56:45
Problema Subsir crescator maximal Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.72 kb
#include <stdio.h>
const int MAX_N = 100000;
int v[MAX_N + 1], L[MAX_N + 1], next[MAX_N + 1];

int main() {

	freopen( "scmax.in", "r", stdin );
	freopen( "scmax.out", "w", stdout );
	int N;

	scanf("%d", &N); L[N] = 1, next[N] = 0;
	for(register int i = 1; i <= N; ++ i)
		scanf("%d", &v[i]);


	for (register int i = N - 1; i > 0; -- i) {
		L[i] = 1, next[i] = 0;

		for (register int j = i + 1; j <= N; ++ j)
			if (v[i] < v[j] and L[j] + 1 > L[i])
				L[i] = L[j] + 1, next[i] = j;
	}

	int lis = L[1], poz = 1;

	for(register int i = 2; i <= N; ++ i)
		if(L[i] > lis)
			lis = L[i], poz = i;

	printf("%d\n", lis);

	int x = poz;

	while(true) {
		printf("%d ", v[x]);
		x = next[x];
		if (!x)
			break;
	}
	printf("\n");
	return 0;
}