Cod sursa(job #908778)

Utilizator taigi100Cazacu Robert taigi100 Data 9 martie 2013 23:23:57
Problema Subsir crescator maximal Scor 65
Compilator cpp Status done
Runda Arhiva educationala Marime 0.65 kb
#include<stdio.h>
#define max 100001
int A[max];
int Lc[max];
int Length,Max;
int celiIndex(int l,int r,int key)
{
	int m;
	while( (r-l)>1 )
	{
		m=(r-l)/2+l;
		(Lc[m] >= key ? r:l) = m;
	}
	return r;
}
int main()
{
	freopen("scmax.in","r",stdin);
	freopen("scmax.out","w",stdout);

	scanf("%d",&Length);
	
    for(int i=1;i<=Length;i++)  scanf("%d",&A[i]);
	Lc[0]=A[0];
	int len=1;
	for(int i=1;i<=Length;i++)
	{
		if(Lc[0]>A[i])
			Lc[0]=A[i];
		else if(Lc[len-1]<A[i])
			Lc[len++]=A[i];
		else
		Lc[celiIndex(-1,len-1,A[i])]=A[i];
	}
	printf("%d\n",len-1);
	for(int i=1;i<len;i++)
		printf("%d ",Lc[i]);
	return 0;
}