Cod sursa(job #491403)

Utilizator HoriaClementHoriaC HoriaClement Data 11 octombrie 2010 10:41:43
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.63 kb
#include <cstdio>

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

void citire()
{
	freopen("scmax.in","r",stdin);
	freopen("scmax.out","w",stdout);
	scanf("%d",&n);
	for(int i=1;i<=n;++i)
		scanf("%d",v+i);
}
int cb(int q)
{
	int i,pas=1<<17;
	for(i=0;pas;pas>>=1)
		if(i+pas<=nr && v[x[i+pas]]<q)
			i+=pas;
	return 1+i;
}
void work()
{
	int p;
	for(int i=1;i<=n;++i)
	{
		p=cb(v[i]);
		pred[i]=x[p-1];
		if(p>nr)
			++nr;
		x[p]=i;
	}
}	
void refac(int p)
{
	if(p==0)
		return;
	refac(pred[p]);
	printf("%d ",v[p]);
}
int main()
{
	citire();
	work();
	printf("%d\n",nr);
	refac(x[nr]);
	return 0;
}