Cod sursa(job #388571)

Utilizator Bit_MasterAlexandru-Iancu Caragicu Bit_Master Data 30 ianuarie 2010 14:08:29
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.76 kb
#include <cstdio>

const int N = 100001;

int v[N],n,x[N],nx,pred[N];

int caut_bin(int j)
{
	int i,pas=1<<16;
	for (i = 0; pas != 0; pas >>= 1)
		if (i + pas <= nx && v[x[i + pas]] < v[j])
			i += pas;
	return i + 1;
}


void citire()
{
	scanf("%d",&n);
	for (int i = 1; i <= n; ++i)
		scanf("%d",&v[i]);
}

void completare_x()
{
	int j;
	nx = 1;
	x[1] = 1;
	for (int i = 2; i <= n; ++i)
	{
		j = caut_bin(i);
		x[j] = i;
		pred[i] = x[j-1];
		if (j > nx)
			++nx;
	}
}

void afisare (int poz)
{
	if (pred[poz] != 0)
		afisare(pred[poz]);
	printf("%d ",v[poz]);
}

int main()
{
	freopen("scmax.in","r",stdin);
	freopen("scmax.out","w",stdout);
	citire();
	completare_x();
	printf("%d\n",nx);
	afisare(x[nx]);
	return 0;
}