Cod sursa(job #408588)

Utilizator archive_testtesting archive archive_test Data 3 martie 2010 09:28:41
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.71 kb
#include <stdio.h>
#define Nmax 100002

int v[Nmax], X[Nmax], T[Nmax], n, i, p, u, mid, sol;

FILE *f = fopen("scmax.in", "r");
FILE *g = fopen("scmax.out", "w");

void print_sol(int x) {
	if (x) {
		print_sol(T[x]);
		fprintf(g, "%d ", v[x]);
	}
	else
		fprintf(g, "%d\n", sol);
}

int main() {
	
	fscanf(f, "%d", &n);
	for (i = 1; i <= n; i++)
		fscanf(f, "%d", &v[i]);
	
	X[1] = 1, sol = 1;
	for (i = 2; i <= n; i++) {
		p = 1, u = sol;
		while (p <= u) {
			mid = (u - p) / 2 + p;
			if (v[i] > v[X[mid]])
				p = mid + 1;
			else
				u = mid - 1;
		}
		
		if (p > sol)
			sol++;
		X[p] = i;
		T[i] = X[p-1];
	}
	
	print_sol(X[sol]);
	
	fclose(f); fclose(g);
	
	return 0;
}