Cod sursa(job #542696)

Utilizator vladbagrinVlad Bagrin vladbagrin Data 26 februarie 2011 20:13:02
Problema Subsir crescator maximal Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.11 kb
#include <vector>
#include <fstream>
#include <iostream>

using namespace std;

vector<int> subsir(int* v, int n)
{
	int* sir;
	int ok = 0;

	sir = new int[n];

	for (int i = 0; i < n; i++)
	{
		sir[i] = 1;

		for (int k = i - 1; k >= 0; k--)
		{
			if (v[k] < v[i] && sir[i] < sir[k] + 1)
			{
				sir[i] = sir[k] + 1;
			}
		}
	}

	vector<int> ret;
	int max = 1;
	int add;

	for (int i = 0; i < n; i++)
	{
		if (sir[i] == max)
			add = v[i];
		else
			if (sir[i] == max + 1)
			{
				ret.push_back(add);
				add = v[i];
				max++;
			}
	}
	ret.push_back(add);

	delete [] sir;
	return ret;
}

int main(int argc, char* argv[])
{
	ifstream file("scmax.in", ifstream::in);
    int n;
    int *v;

    file >> n;
    v = new int[n];

    for (int i = 0; i < n; i++)
        file >> v[i];

    file.close();

    ofstream out("scmax.out", ofstream::out);
    vector<int> sir = subsir(v, n);

    out << (int) sir.size() << endl;
	for (vector<int>::iterator it = sir.begin(); it != sir.end(); it++)
		out << *(it) << " ";

    out.flush();
    out.close();
	return 0;
}