Cod sursa(job #174870)

Utilizator blasterzMircea Dima blasterz Data 9 aprilie 2008 12:23:28
Problema Subsir crescator maximal Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 0.71 kb
#include <cstdio>
#define maxn 100001

int a[maxn], x[maxn],p[maxn],poz[maxn],sol[maxn];
int n;

void solve()
{
	x[1]=a[1];
	poz[1]=1;
	int nr=1,j,v,i,cnt;
	
	for(i=2;i<=n;++i)
	{
		v=a[i];
		
		for(j=1,cnt=(1<<17); cnt; cnt>>=1)
			if(j+cnt<=nr)
			if(x[j+cnt]<v) j+=cnt;
		
		if(x[j]<=v) ++j;
		if(j>nr) nr=j;
		x[j]=v;
		p[i]=poz[j-1];
		poz[j]=i;
	}
	
	freopen("scmax.out","w",stdout);
	printf("%d\n", nr);
	int N=0;
	for(i=poz[nr]; i; i=p[i])sol[++N]=a[i];//printf("%d ", a[i]);
		
	for(i=N;i>=1;--i)printf("%d ", sol[i]);
	printf("\n");
		
	
}

int main()
{
	freopen("scmax.in","r",stdin);
	scanf("%d\n", &n);
	for(int i=1;i<=n;++i) scanf("%d ", a+i);
	
	solve();
	return 0;
}