Cod sursa(job #379659)

Utilizator GotenAmza Catalin Goten Data 3 ianuarie 2010 00:56:12
Problema Subsir crescator maximal Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 0.71 kb
#include<fstream.h>

int st,dr,i,j,mij,m[101000],a[101000],b[101000],p[101000],n,L,gasit,u;

int main()
{
	ifstream f("scmax.in");
	ofstream g("scmax.out");
	f>>n;
	for(i=1;i<=n;i++)
		f>>a[i];
	u=(1<<30);
	a[0]=-u;
	m[1]=1;
	for(i=2;i<=n;i++)
	{
		st=0;
		dr=L;
		gasit=0;
		j=0;
		while(st<=dr&&!gasit)
		{
			mij=(st+dr)>>1;
			if(a[m[mij]]<a[i]&&(a[i]<=a[m[mij+1]]||mij==L))
			{
				gasit=1;
				j=mij;
			}
			else
				if(a[m[mij+1]]<a[i])
					st=mij+1;
				else
					dr=mij-1;
		}
		if(gasit)
		{
			m[j+1]=i;
			p[i]=m[j];
			if(j+1>L)
				L=j+1;
		}
	}
	i=m[L];
	j=0;
	while(i)
	{
		b[++j]=a[i];
		i=p[i];
	}
	g<<L<<'\n';
	for(i=j;i;i--)
		g<<b[i]<<' ';
	return 0;
}