Cod sursa(job #460717)

Utilizator veliki.velicuVelicu Stefan veliki.velicu Data 3 iunie 2010 17:46:22
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.61 kb
#include<fstream>
using namespace std;

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

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

void recon(int poz)
{
	if(!poz)
		return;
	recon(pred[poz]);
	out<<v[poz]<<" ";
}

int caut(int nr)
{
	int pas = 1<<17, i;
	for(i=0; pas; pas/=2)
		if(i+pas<=m && v[x[i+pas]]<nr)
			i+=pas;
	return i+1;
}

int main()
{
	int i, j, n;
	in>>n;
	for(i=1; i<=n; i++)
		in>>v[i];
	x[1] = 1;
	m=1;
	for(i=2; i<=n; i++)
	{
		j = caut(v[i]);
		if(j>m)
			m++;
		x[j] = i;
		pred[i] = x[j-1];
	}
	out<<m<<"\n";
	recon(x[m]);
	
	return 0;
}