Cod sursa(job #703872)

Utilizator tvararuVararu Theodor tvararu Data 2 martie 2012 15:05:40
Problema Subsir crescator maximal Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;

int n;
vector<int> sir, len, poz;

int main (int argc, char const *argv[])
{
	ifstream in ("scmax.in");
	in >> n;
	sir.resize(n);
	for (int i = 0; i < n; i++)
	{
		in >> sir[i];
	}
	in.close();
	/*
	cout << n << '\n';
	for (int i = 0; i < n; i++)
	{
	 	cout << sir[i] << ' ';
	}
	cout << '\n';
	*/
	if (n == 1) //sanity check
	{
		ofstream out ("scmax.out");
		out << 1 << '\n';
		out << sir[0] << '\n';
		out.close();
		return 0;
	}
	
	len.resize(n, 1);
	poz.resize(n, -1);
	
	len[n - 1] = 1;
	for (int i = n - 2; i >= 0; i--)
	{
		for (int j = i; j < n; j++)
		{
			if (sir[i] < sir[j])
			{
				if (len[i] < len[j] + 1)
				{
					len[i] = len[j] + 1;
					poz[i] = j;
				}
			}
		}
	}
	
	int max = 0, indexmax;
	for (int i = 0; i < n; i++)
	{
		if (len[i] > max)
		{
			max = len[i];
			indexmax = i;
		}
	}
	
	ofstream out ("scmax.out");
	out << max << '\n';
	do
	{
		out << sir[indexmax] << ' ';
		indexmax = poz[indexmax];
	}
	while (indexmax != -1);
	out << '\n';
	out.close();

	return 0;
}