Cod sursa(job #561626)

Utilizator blastoiseZ.Z.Daniel blastoise Data 20 martie 2011 21:15:07
Problema Subsir crescator maximal Scor 65
Compilator cpp Status done
Runda Arhiva educationala Marime 0.65 kb
#include <string.h>
#include <stdio.h>

int d[100002],v[100002];
int i,size,pos,N;

int BS(int x,int L,int R)
{
	if(L<=R)
	{
		int M=(L+R)/2;
		if(x>d[M]) return BS(x,L,M-1);
		else
		if(x<d[M]) return BS(x,M+1,R);
		else return M;
	}
	else return L;
}

int main()
{
	freopen("scmax.in","r",stdin);
	freopen("scmax.out","w",stdout);

	scanf("%d",&N);
	for(i=1;i<=N;i++) scanf("%d",&v[i]);

	memset(d,0,sizeof(d));
	size=1;
	d[1]=v[N];

	for(i=N-1;i>0;i--)
	{
		pos=BS(v[i],1,size+1);
		if(pos>size) size=pos;
		if(d[pos]<v[i]) d[pos]=v[i];
	}

	printf("%d\n",size);
	for(i=size;i>0;i--) printf("%d ",d[i]);

	return 0;
}