Cod sursa(job #186652)

Utilizator Spike7d8Cristian Varvara Spike7d8 Data 28 aprilie 2008 15:55:13
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.75 kb
#define _CRT_SECURE_NO_WARNINGS

#include <cstdio>


#define N 100352
#define P 131072

int na, nb, a[N], b[N], c[N];


int search(int val)
{
	int i = 0;
	for (int step = P; step; step >>= 1)
		if (i + step <= nb && b[i + step] < val)
			i += step;
	return i;
}


int main()
{
	freopen("scmax.in", "rt", stdin);
	freopen("scmax.out", "wt", stdout);

	scanf("%d", &na);
	for (int i = 1; i <= na; i++)
	{
		scanf("%d", a + i);

		int pos = search(a[i]) + 1;
		b[pos] = a[i];
		c[i] = pos;

		if (nb < pos)
			nb = pos;
	}

	printf("%d\n", nb);


	for (int i = na, j = nb; j; j--)
	{
		while (c[i] != j)
			--i;
		b[j] = a[i];
	}

	for (int i = 1; i <= nb; i++)
		printf("%d ", b[i]);
	printf("\n");

	return 0;
}