Cod sursa(job #661590)

Utilizator ELHoriaHoria Cretescu ELHoria Data 14 ianuarie 2012 19:01:29
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.85 kb
#include <fstream>

using namespace std;

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

const int NMAX = 100005;
int ans , N , nr , apos;
int bst[NMAX] , L[NMAX] , p[NMAX] , v[NMAX];

int bins(int x)
{
	int st = 0 , dr = nr , mid;
	while(st <= dr) {
		mid = (st + dr)>>1;
		if(v[ L[mid] ] < x && v[ L[mid + 1] ] >= x) return mid;
		if(v[ L[mid + 1] ] < x) st = mid + 1;
		else dr = mid - 1;
	}
	return nr;
}

void write(int i)
{
	if(p[i] > 0) write(p[i]);
	fout<<v[i]<<' ';
}

int main()
{
	fin>>N;
	for(int i = 1;i<=N;++i)
		fin>>v[i];
	nr = L[1] = bst[1] = 1;
	ans = apos = 1;
	for(int i = 2;i<=N;++i) {
		int pos = bins(v[i]);
		p[i] = L[pos];
		bst[i] = pos + 1;
		L[pos + 1] = i;
		if(nr < pos + 1) nr = pos + 1;
		if(bst[i] > ans) ans = bst[i] , apos = i;
	}
	fout<<ans<<'\n';
	write(apos);
	return 0;
}