Cod sursa(job #503996)

Utilizator alexandra_naeNae Alexandra Beatrice alexandra_nae Data 26 noiembrie 2010 08:27:17
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.6 kb
#include<stdio.h>
int pred[100001], x[100001],v[100001];
int max,n;

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