Cod sursa(job #491402)

Utilizator toniobFMI - Barbalau Antonio toniob Data 11 octombrie 2010 10:37:44
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.76 kb
#include <fstream>
using namespace std;

ifstream in ("scmax.in");
ofstream out ("scmax.out");

const int N = 1 << 17;
int n, nr, x[N], v[N], pred[N];

int bs (int q) {
	int step = N, i = 0;
	for (; step; step >>= 1) {
		if (i + step <= nr && v[x[i + step]] < q) {
			i += step;
		}
	}
	return i + 1;
}

void refac (int p) {
	if (p == 0) {
		return;
	}
	refac (pred[p]);
	out << v[p] << ' ';
}

void citire () {
	in >> n;
	for (int i = 1; i <= n; in >> v[i++]);
}

void exe () {
	for (int i = 1; i <= n; ++i) {
		int p = bs (v[i]);
		pred[i] = x[p - 1];
		nr = p > nr ? nr + 1 : nr;
		x[p] = i;
	}
}

void afisare () {
	out << nr << '\n';
	refac (x[nr]);
}


int main () {
	citire ();
	
	exe ();
	
	afisare ();
	
	return 0;
}