Cod sursa(job #702587)

Utilizator alexdmotocMotoc Alexandru alexdmotoc Data 1 martie 2012 23:28:23
Problema Subsir crescator maximal Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 kb
#include <cstdio>
#include <iostream>
#include <algorithm>

using namespace std;

#define maxN 100005

int N , x[maxN] , sol[maxN] , best[maxN] , tata[maxN];

int main ()
{
	freopen ("scmax.in" , "r" , stdin);
	freopen ("scmax.out" , "w" , stdout);
	
	scanf ("%d" , &N);
	
	int pozmax , sol_cost = 0 , poz;
	
	for (int i = 1 ; i <= N ; ++i)
	{
		scanf ("%d" , &x[i]);
		
		int lmax = 0;
		
		for (int j = 1 ; j < i ; ++j)
			if (best[j] > lmax && x[j] < x[i])
			{
				lmax = best[j];
				poz = j;
			}
		
		best[i] = lmax + 1;
		
		if (best[i] > sol_cost)
		{
			sol_cost = best[i];
			tata[i] = poz;
			
			pozmax = i;
		}
		
	}
	
	int dim = 0;
	
	for (int i = pozmax ; i ; i = tata[i])
		sol[++dim] = x[i];
	
	
	printf ("%d\n" , sol_cost);
	
	for (int i = dim ; i >= 1 ; --i)
		printf ("%d " , sol[i]);
	
	return 0;
}