Cod sursa(job #703340)

Utilizator runnerbloodVoda Alexandru-Ioan runnerblood Data 2 martie 2012 11:54:13
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.61 kb
#include <fstream>
using namespace std;

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

const int N = 100001;

int v[N], n, m, x[N], pred[N];

void subsir(int p) {
	if (pred[p]!=0)
		subsir (pred[p]);
	out << v[p] << " ";
}
	
int caut(int val) {
	int i, pas=1<<16;
	for (i=0; pas!=0; pas/=2) 
		if (i+pas<=m && v[x[i+pas]]<val) 
			i+=pas;
	return i;
}
int main() {
	in >> n;
	for (int i=1; i<=n; i++) 
		in >> v[i];
	m = 0;
	x[++m] = 1;
	for (int i=2; i<=n; i++) {
		int j=caut(v[i]);
		x[j+1]=i;
		pred[i]=x[j];
		if ( j==m ) {++m;}
	}
	out << m << "\n";
	subsir(x[m]);
}