Cod sursa(job #177369)

Utilizator razvi9Jurca Razvan razvi9 Data 12 aprilie 2008 20:03:42
Problema Subsir crescator maximal Scor 65
Compilator cpp Status done
Runda Arhiva educationala Marime 0.55 kb
#include<cstdio>
int a[100001],i,x,nr,n;
inline int poz(int x)
{
	int st=0,dr=nr,m;
	while(st<dr)
	{
		m=(st+dr+1)>>1;
		if(a[m]==x) return m-1;
		if(a[m]<x) st=m;
		else dr=m-1;
	}
	return st;
}
int main()
{
	freopen("scmax.in","r",stdin);
	freopen("scmax.out","w",stdout);
	scanf("%d",&n);
	scanf("%d",&a[1]);nr=1;
	while(--n)
	{
		scanf("%d",&x);
		i=poz(x);
		if(i+1>=nr || a[i+2]!=x)
		{
			a[i+1]=x;
			if(i+1>nr) nr=i+1;
		}
	}
	printf("%d\n",nr);
	for(i=1;i<=nr;i++)
		printf("%d ",a[i]);
	fclose(stdout);
	return 0;
}