Cod sursa(job #750514)

Utilizator cremarencodianaCremarenco Diana cremarencodiana Data 22 mai 2012 14:04:30
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.78 kb
# include <stdio.h>
int a[100001],q[100001],p[100001],poz,i,nr,n,b[100001],n1,max;
int cb(int x, int st, int dr)
{
	int m;
	while (st<=dr && q[m]!=x)
	{
		m=(st+dr)/2;
		if (q[m]==x) return m;
		else
			if (q[m]>x) dr=m-1;
		else
			st=m+1;
	}
	return st;
}

int main()
{
	freopen("scmax.in","r",stdin);
	freopen("scmax.out","w",stdout);
	scanf("%d\n",&n);
	for (i=1; i<=n; i++)
		scanf("%d ",&a[i]);
	q[1]=a[1];
	p[1]=1;
	nr=1;
	for (i=2; i<=n; i++)
	{
		poz=cb(a[i],1,nr);
		if (poz>nr) { nr++; q[nr]=a[i]; }
		q[poz]=a[i];
		p[i]=poz;
		if (p[i]>max) max=p[i];
	}
	printf("%d\n",max);
	for (i=n; i>=1; i--)
	{
		if (p[i]==max && max!=0) 
		{
			b[++n1]=a[i];
			max--;
		}
	}
	for (i=n1; i>=1; i--)
		printf("%d ",b[i]);
	printf("\n");
	return 0;
}