Cod sursa(job #393945)

Utilizator Adela_BaciuAdela Baciu Adela_Baciu Data 10 februarie 2010 11:06:22
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.62 kb
#include<cstdio>
int m,n,a[100010],lung[100010],pred[100010],sol[100010],x[100010];
int cb(int b)
{
	int i,pas;
	for(pas=1;pas<=m;pas<<=1);
	for(i=0;pas!=0;pas>>=1)
        if(i+pas<=m && a[x[i+pas]]<b)
            i+=pas;
    return i+1;
}

void scrie(int poz)
{
	if(pred[poz])
		scrie(pred[poz]);
	printf("%d ",a[poz]);
}

int main()
{
	int i,j;
	freopen("scmax.in","r",stdin);
	freopen("scmax.out","w",stdout);
	scanf("%d",&n);
	for(i=1;i<=n;i++)
		scanf("%d",&a[i]);
	m=1;
	x[1]=1;
	for(i=2;i<=n;i++)
	{
		j=cb(a[i]);
		if(j>m)
			++m;
		x[j]=i;
		pred[i]=x[j-1];
	}
	printf("%d\n",m);
	scrie(x[m]);
	return 0;
}