Cod sursa(job #562264)

Utilizator gramatovici_paulGramatovici Paul gramatovici_paul Data 22 martie 2011 18:40:46
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.59 kb
#include<stdio.h>

int n,nr,v[100001],pred[100001],x[100001];

int caut(int poz)
{
	int i,pas=1<<16;
	for(i=0;pas;pas/=2)
		if (pas+i<=nr && v[x[i+pas]]<v[poz])
			i+=pas;
	return i+1;
}

void sir(int p)
{
	if (pred[p])
		sir(pred[p]);
	printf("%d ",v[p]);
}

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",&v[i]);
	}
	nr=1;
	x[1]=1;
	for(i=2;i<=n;++i)
	{
		j=caut(i);
		if (j>nr) ++nr;
		x[j]=i;
		pred[i]=x[j-1];
	}
	printf("%d\n",nr);
	sir(x[nr]);
	return 0;
}