Cod sursa(job #2440346)

Utilizator mvcl3Marian Iacob mvcl3 Data 18 iulie 2019 11:08:21
Problema Subsir crescator maximal Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.08 kb
#include<fstream>
#include<vector>
#include<algorithm>
using namespace std;

inline void read(ifstream& in, int& n, vector<int>& v) {
	in >> n;
	v.resize(n);
	for (int i = 0; i < n; ++i)
		in >> v[i];
}

inline int computeMaxim(int n, vector<int>& v, vector<int>& best, vector<int>& from) {
	best.resize(n, 0);
	vector<int> pre(n, 0);

	int solutionIdx = 0;
	for (int i = 0; i < n; ++i) {
		best[i] = 1;
		pre[i] = i;

		for (int j = 0; j < i; ++j) {
			if (v[j] < v[i] && best[j] >= best[i]) {
				best[i] = best[j] + 1;
				pre[i] = j;
			}
		}

		if (best[i] >= best[solutionIdx])
			solutionIdx = i;
	}
	int i;
	for (i = solutionIdx; i != pre[i]; i = pre[i])
		from.push_back(i);
	from.push_back(i);

	return solutionIdx;
}

int main() {
	vector<int> a;
	vector<int> best;
	vector<int> from;
	int n;
	ifstream in("scmax.in");
	ofstream out("scmax.out");

	read(in, n, a);
	out << best[computeMaxim(n, a, best, from)] << endl;
	for (auto el = from.rbegin(); el != from.rend(); ++el)
		out << a[*el] << ' ';

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