Cod sursa(job #509059)

Utilizator veigangvladveigang vlad veigangvlad Data 10 decembrie 2010 11:21:44
Problema Subsir crescator maximal Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 0.77 kb
# include <stdio.h>

int a[101000],q[101000],p[100100],d[100100],n,nr,i,m; 

void caut (int x, int st, int dr, int j)
{
	int poz=0;
		while (st<=dr && poz==0)
		{
			m=(st+dr)/2;
			if (q[m-1]<=x && q[m]>x)
			{
				poz=m;
				q[poz]=x;
				p[i]=poz;
			}
			else if (q[m-1]>x)
				dr=m-1;
			else if (q[m]<=x)
				st=m+1;
		}
}

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