Cod sursa(job #1382418)

Utilizator BonCipBonciocat Ciprian Mircea BonCip Data 8 martie 2015 23:10:18
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.75 kb
#include <stdio.h>
#define NMAX 100000

int v[NMAX], m[NMAX], p[NMAX], sol[NMAX];

int main()
{
	FILE *fin, *fout;
	fin = fopen("scmax.in", "r");
	fout = fopen("scmax.out", "w");

	int N;
	fscanf(fin, "%d", &N);

	int i;
	for (i = 0; i < N; ++i) {
		fscanf(fin, "%d", v + i);
	}

	int ss = 0;
	for (i = 0; i < N; ++i) {
		int l = 1, r = ss + 1;
		while (l < r) {
			int med = (l + r) / 2;
			if (v[m[med]] < v[i]) {
				l = med + 1;
			} else {
				r = med;
			}
		}
		p[i] = m[l - 1];
		m[l] = i;
		if (l > ss) {
			ss = l;
		}
	}

	fprintf(fout, "%d\n", ss);
	int pos = m[ss];
	i = ss;
	for (i = ss - 1; i >= 0; --i) {
		sol[i] = v[pos];
		pos = p[pos];
	}
	for (i = 0; i < ss; ++i) {
		fprintf(fout, "%d ", sol[i]);
	}

	fclose(fin);
	fclose(fout);
	return 0;
}