Cod sursa(job #410996)

Utilizator GotenAmza Catalin Goten Data 4 martie 2010 17:57:53
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.67 kb
#include<fstream.h>
#include<iostream.h>
int a[100100],b[100100],pre[100100],s[100100];
int main()
{
	int i,n,L,st,dr,gasit,m;
	ifstream f("scmax.in");
	ofstream g("scmax.out");
	f>>n;
	for(i=1;i<=n;i++)
		f>>a[i];
	b[1]=1;
	L=1;
	for(i=2;i<=n;i++)
	{
		st=0;
		dr=L;
		gasit=0;
		while(st<=dr&&!gasit)
		{
			m=(st+dr)>>1;
			if(a[b[m]]<a[i]&&(m==L||a[i]<a[b[m+1]]))
				gasit=1;
			else
				if(a[b[m]]<a[i])
					st=m+1;
				else
					dr=m-1;
		}
		if(gasit)
		{
			b[m+1]=i;
			pre[i]=b[m];
			if(m==L)
				L++;
		}
	}
	i=b[L];
	while(i)
	{
		s[++s[0]]=a[i];
		i=pre[i];
	}
	g<<L<<'\n';
	for(i=s[0];i;i--)
		g<<s[i]<<' ';
	return 0;
}