Cod sursa(job #415184)

Utilizator OdinSandu Bogdan-Mihai Odin Data 10 martie 2010 23:18:21
Problema Subsir crescator maximal Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.72 kb
#include<stdio.h>
#define mm 100005
int i,v[mm],poz,k,n,l[mm],sol[mm],s[mm],max,p,j;
int cb(int st, int dr)
{
	int pz=0,mij;
	while(st<=dr)
	{
		mij=(st+dr)>>1;
		if(s[mij]>v[i]){dr=mij-1;pz=mij;}
		else st=mij+1;
	}
	return pz;
}
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++)
	{
		poz=cb(0,k);
		if(poz)
		{
			s[k]=v[i];
			l[i]=k;
		}
		else
		{
			s[++k]=v[i];
			l[i]=k;
		}
		if(l[i]>max)
		{
			max=l[i];
			p=i;
		}
	}
	printf("%d\n",max);
	while(p)
	{
		if(l[p]==max)
		{
			sol[++j]=v[p];
			max--;
		}
		p--;
	}
	for(i=j;i>=1;i--)
		printf("%d ",sol[i]);
	return 0;
}