Cod sursa(job #1147171)

Utilizator vladrochianVlad Rochian vladrochian Data 19 martie 2014 17:17:08
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.62 kb
#include <fstream>
using namespace std;
int n,v[100001],p[100001],b[100001],bl;
int bs(int val)
{
	int ans=0,s=1,e=bl-1;
	while(s<=e)
	{
		int m=(s+e)/2;
		if(v[b[m]]<val)
		{
			ans=m;
			s=m+1;
		}
		else
			e=m-1;
	}
	return ans;
}
ifstream fin("scmax.in");
ofstream fout("scmax.out");
void sol(int i)
{
	if(p[i])
		sol(p[i]);
	fout<<v[i]<<" ";
}
int main()
{
	int i,j;
	fin>>n;
	for(i=1;i<=n;i++)
		fin>>v[i];
	for(i=1;i<=n;++i)
		if(v[i]>v[b[bl]])
		{
			p[i]=b[bl];
			b[++bl]=i;
		}
		else
		{
			j=bs(v[i]);
			p[i]=b[j];
			b[j+1]=i;
		}
	fout<<bl<<"\n";
	sol(b[bl]);
	return 0;
}