Cod sursa(job #2990645)

Utilizator mati.coldea@gmail.comMatei Coldea [email protected] Data 8 martie 2023 11:46:58
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.95 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin("scmax.in");
ofstream fout("scmax.out");
vector<int> a(100005);

#define INF 2000000002
int n;
int main() {
	fin >> n;
	vector<int> dp(n + 5, INF);
	vector<int> par(n + 5);
	vector<int> ind(n + 5, -1);
	for (int i = 1; i <= n; i++) {
		fin >> a[i];
	}
	
	
	dp[0] = -INF;

	
	for (int i = 1; i <= n; i++) {
		int pos = upper_bound(dp.begin() , dp.end(), a[i]) - dp.begin();

		if (dp[pos - 1] < a[i] && a[i] < dp[pos]) {
			
			ind[pos] = i;
			par[i] = ind[pos-1];

			dp[pos] = a[i];

		}
	}
	int nr = 0;
	for (int i = 1; i <= n; i++) {
		if (dp[i] != INF) {
			nr = i;
		}
	}


	fout << nr<<'\n';

	vector<int> rasp;
	int el_ultim = ind[nr];
	while (el_ultim != -1) {
		rasp.push_back(a[el_ultim]);
		el_ultim = par[el_ultim];
	}

	reverse(rasp.begin(), rasp.end());

	for (auto i : rasp) {
		fout << i << ' ';
	}
	fout << '\n';




	return 0;
}