Cod sursa(job #846206)

Utilizator test_13testing test_13 Data 1 ianuarie 2013 18:19:33
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.68 kb
#include <stdio.h>
#define Max 100001

int n,a[Max],b[Max],c[Max],k;

int bsearch(int lf,int rt,int val)
{
	int md;
	while(lf<
		rt)
	{
		md=(lf+rt)/2;
		if(c[md]<val)lf=md+1; else rt=md;
	}
	if(rt>k)k=rt;
	c[lf]=val;
	return lf;
}

void tipar(int n,int k)
{
	if(k>0)
	for(int i=n;i>0;i--)
	if(b[i]==k)
	{
		tipar(i-1,k-1);
		printf("%d ",a[i]);
		return;

	}
}


int main()
{
	freopen("scmax.in","r",stdin);
	freopen("scmax.out","w",stdout);
		scanf("%d",&n);
		for(int i=1;i<=n;i++)scanf("%d",&a[i]);
		for(int i=1;i<=n;i++)
			b[i]=bsearch(1,k+1,a[i]);
		printf("%d\n",k);
		tipar(n,k);
		//for(int i=1;i<=n;i++)printf("%d ",b[i]);
	return 0;
}