Cod sursa(job #447289)

Utilizator pirvupirvu tudor pirvu Data 28 aprilie 2010 12:19:21
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.62 kb
#include<cstdio>

int x[1<<17],pred[1<<17],v[1<<17];

int n,p,m,i;

int caut (int q)
{
	int i,pas=1<<16;
	for (i=0;pas;pas>>=1)
		if (i+pas<=m && v[x[i+pas]]<q)
			i+=pas;
	return 1+i;	
}

void qq (int x)
{
	if (pred[x]!=0)
		qq ( pred[x]) ;
	
	printf("%d ", v[x]);	
}


int main()
{
	
	freopen("scmax.in","r",stdin);
	freopen("scmax.out","w",stdout);
	
	scanf("%d", &n);
	
	for  (i=1;i<=n;i++)
		scanf("%d", &v[i]);
	
	m=1;
	x[1]=1;
	
	for (i=2;i<=n;i++)
	{
		p=caut (v[i]);
		if (p>m) ++m;
		x[p]=i;
		pred[i]=x[p-1];		
	}
	
	
	printf("%d\n", m);
	
	qq ( x[m]);	
	
	return 0;
}