Cod sursa(job #667420)

Utilizator MultiHackRaul Iulian MultiHack Data 23 ianuarie 2012 01:13:12
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.69 kb
#include<fstream>
using namespace std;
int v[100004], a[100004], b[100004]; 
int lung, n;
ofstream fout("scmax.out");
int caut_binar(int i)
{
	int mij,st=1,dr=lung,lmax=0; 
	while(st<=dr) 
	{
		mij=st+ (dr-st)/2; 
		if(v[a[mij]]<v[i])
		{
			lmax=mij; 
			st=mij+1; 
		}
		else 
			dr=mij-1; 
	}
	return lmax; 
}
void dp()
{
	lung=1;
	a[1]=1; 
	for(int i=2;i<=n;++i) 
	{
		int j=caut_binar(i); 
		if(!a[j+1]) 
		{
			a[j+1]=i;
			++lung;
		}
		else 
			if(v[a[j+1]]>v[i]) 
				a[j+1] = i;
		b[i]=a[j]; 
	}
}
void write(int i)
{
	if(b[i]) 
		write(b[i]); 
	fout<<v[i]<<" ";
}
int main()
{
	ifstream fin("scmax.in");
	fin>>n;
	for(int i=1;i<=n;++i)
		fin>>v[i];
	dp();
	fout<<lung<<"\n";
	write(a[lung]); 
}