Cod sursa(job #1009814)

Utilizator andreiiiiPopa Andrei andreiiii Data 13 octombrie 2013 21:20:06
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.58 kb
#include <cstdio>
#include <algorithm>
#define N 100001
using namespace std;

int a[N], b[N], lg[N], sol[N];
int k=1;

int bs(int n)
{
	if(n>b[k]) return ++k;
	return lower_bound(b+1, b+k+1, n)-b;
}

int main()
{
	freopen("scmax.in", "r", stdin);
	freopen("scmax.out", "w", stdout);
	int n, i, p;
	scanf("%d", &n);
	for(i=1;i<=n;i++)
	{
		scanf("%d", &a[i]);
	}
	b[1]=a[1];lg[1]=1;
	for(i=2;i<=n;i++)
	{
		p=bs(a[i]);
		b[p]=a[i];
		lg[i]=p;
	}
	printf("%d\n", k);
	for(i=n, p=k;i&&p;i--)
	{
		if(lg[i]==p)
		{
			sol[p]=a[i];
			p--;
		}
	}
	for(i=1;i<=k;i++)
	{
		printf("%d ", sol[i]);
	}
}