Cod sursa(job #393948)

Utilizator DeadEyeNaiba Mihai Lucian DeadEye Data 10 februarie 2010 11:15:05
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.62 kb
#include<cstdio>
int n,m,a[100001],l[100001],p[100001],x[100001];
int ver(int pp)
{
	int vv=0,pas=1<<17;
	for(vv=0;pas;pas>>=1)
		if(vv+pas<=m && a[x[vv+pas]]<pp)
			vv+=pas;
	return vv+1;
}
void preamultefunctii(int pp)
{
	if(p[pp])
		preamultefunctii(p[pp]);
	printf("%d ",a[pp]);
}
int main()
{
	int i,j;
	freopen("scmax.in","r",stdin);
	freopen("scmax.out","w",stdout);
	scanf("%d",&n);
	for(i=1;i<=n;++i)
		scanf("%d",&a[i]);
	l[i]=1;
	m=0;
	x[++m]=1;
	for(i=2;i<=n;++i)
	{
		j=ver(a[i]);
		if(j>m)
			++m;
		x[j]=i;
		p[i]=x[j-1];
	}
	printf("%d\n",m);
	preamultefunctii(x[m]);
	return 0;
}