Cod sursa(job #481400)

Utilizator c_adelinaCristescu Adelina c_adelina Data 31 august 2010 16:49:11
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.62 kb
#include <cstdio>
#define N 100003
int last[N],poz[N];
int main()
{
	int n,i,m=0,v[N];
	freopen("scmax.in","r",stdin);
	freopen("scmax.out","w",stdout);
	scanf("%d",&n);
	for (i=1;i<=n;++i)
	{
		int x=1,y=m,sol=0;
		scanf("%d",&v[i]);
		while (x<=y)
		{
			int z=(x+y)/2;
			if (last[z]>v[i]) 
				y=z-1,sol=z; else
					if (last[z]<v[i]) x=z+1; else
						sol=z,x=y+1;
		}
		if (!sol) ++m,sol=m;
		last[sol]=v[i];
		poz[i]=sol;
	}
	printf("%d\n",m);
	for (i=m;i>0;--i)
		{while (poz[n]!=i && n) --n;
	     last[i]=v[n];
		}
	for (i=1;i<=m;++i)
		printf("%d ",last[i]);
		
		return 0;}