Cod sursa(job #407204)

Utilizator BooZZySandu Bogdan BooZZy Data 2 martie 2010 09:58:20
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.67 kb
#include<stdio.h>
long long int INF=2000000005;
int v[100005],l[100005],i,j,max,n,s[100005],sol[100005],k,m,st,dr,poz,p;
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]);
	for(i=1;i<=n;i++)
	{
		st=0;dr=k;poz=0;
		while(st<=dr)
		{
			m=(st+dr)>>1;
			if(s[m]>=v[i]){dr=m-1;poz=m;}
			else st=m+1;
		}
		if(poz){s[poz]=v[i];l[i]=poz;}
		else {s[++k]=v[i];l[i]=k;}
		if(l[i]>max){max=l[i];p=i;}
	}
		printf("%d\n",max);
		while(max)
		{
			if(l[p]==max)
			{
				sol[++j]=v[p];
				max--;
			}
			p--;
		}
		for(i=j;i>=1;i--)
			printf("%d ",sol[i]);
	return 0;
}