Cod sursa(job #2721864)

Utilizator ardutgamerAndrei Bancila ardutgamer Data 12 martie 2021 12:55:20
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.92 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>

using namespace std;

ifstream fin("scmax.in");
ofstream fout("scmax.out");

const int NMAX = 100005;

int lg[NMAX];
vector<int>best;
vector<int>sol;
int v[NMAX];

int n, ma = 0;

int main()
{
	fin >> n;
	for (int i = 1; i <= n; i++)
		fin >> v[i];
	lg[1] = 1;
	best.push_back(v[1]);
	for (int i = 2; i <= n; i++)
	{
		vector<int>::iterator it = lower_bound(best.begin(), best.end(), v[i]);
		if (it == best.end())
		{
			best.push_back(v[i]);
			lg[i] = best.size();
			ma = max(ma, lg[i]);
			continue;
		}
		lg[i] = it - best.begin() + 1;
		ma = max(ma, lg[i]);
		*it = v[i];
	}
	int cnt = ma;
	fout << ma << '\n';
	for (int i = n; i >= 1; i--)
		if (lg[i] == cnt)
		{
			sol.push_back(v[i]);
			cnt--;
		}
	sort(sol.begin(), sol.end());
	for (int elem : sol)
		fout << elem << ' ';
	fout << '\n';
	return 0;
}