Cod sursa(job #547945)

Utilizator alexdmotocMotoc Alexandru alexdmotoc Data 6 martie 2011 20:43:28
Problema Subsir crescator maximal Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 kb
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;

int n , best[100005]  , sir[100005]  , pozmax;
long long x[100005];

int main ()
{
	ifstream f ("scmax.in");
	ofstream g ("scmax.out");
	
	vector <int> sol;
	
	int max = 0;
	
	f >> n;
	
	for (int i = 1 ; i <= n ; ++i)
		f >> x[i];
	
	
	for (int i = 1 ; i <= n ; ++i)
	{
		int maxx = 0;
		best[i] = 0;
		sir[i] = 0;
		
		for (int j = 1 ; j < i ; ++j)
			if (x[j] < x[i] && best[j] > maxx)
			{
				maxx = best[j];
				sir[i] = j;
			}
		
		best[i] = maxx + 1;	
		
		if (best[i] > max)
		{
			max = best[i];
			pozmax = i;
		}
	}
	
	g << max << "\n";
	
	for (int i = pozmax ; i ; i = sir[i])
		sol.push_back (x[i]);
	for (int i = sol.size() - 1 ; i >= 0 ; --i)
		g << sol[i] << " ";
	
	g << "\n";
	
	return 0;
}