Cod sursa(job #3338578)

Utilizator newLerLorand New Eros newLer Data 4 februarie 2026 02:07:30
Problema Subsir crescator maximal Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.02 kb
#include <fstream>
#include <vector>
#include <algorithm>

using namespace std;

int main()
{
	ifstream ifs("scmax.in");
	ofstream ofs("scmax.out");

	int nn;
	ifs >> nn;

	vector<uint32_t> a;
	for (int ii = 0; ii < nn; ++ii)
	{
		uint32_t x;
		ifs >> x;
		a.push_back(x);
	}

	vector<uint32_t> lis(a.size());
	vector<int32_t> prev(a.size());

	int const SEQUENCE_STARTER = -1;
	for (int ii = 0; ii < nn; ++ii)
	{
		lis[ii] = 1;
		prev[ii] = SEQUENCE_STARTER;
		for (int jj = 0; jj < ii; ++jj)
		{
			if (a[ii] > a[jj] && lis[jj] + 1 > lis[ii])
			{
				lis[ii] = lis[jj] + 1;
				prev[ii] = jj;
			}
		}
	}

	vector<uint32_t> sol;
	uint32_t longest = 1;
	int last = 0;
	for (int ii = 0; ii < nn; ++ii)
	{
		if (lis[ii] > longest)
		{
			longest = lis[ii];
			last = ii;
		}
	}
	ofs << longest << endl;
	for (int ii = last; ii != SEQUENCE_STARTER; ii = prev[ii])
	{
		sol.push_back(a[ii]);
	}
	for (int ii = longest; ii > 0; --ii)
	{
		ofs << sol[ii - 1] << " ";
	}

	return 0;
}