Cod sursa(job #3166734)

Utilizator maiaauUngureanu Maia maiaau Data 9 noiembrie 2023 14:37:44
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.68 kb
#include <bits/stdc++.h>
using namespace std;
#define pb push_back

ifstream f("scmax.in");
ofstream g("scmax.out");

int n, l;
vector<int> dp, v, prv, idx;

int main()
{
	f >> n; dp.pb(0), v.resize(n+3), 
	prv.resize(n+3); idx.resize(n+3);
	for (int i = 1; i <= n; i++){
		f >> v[i];
		vector<int>::iterator it = lower_bound(dp.begin(), dp.end(),v[i]);
		if (it == dp.end()) {
			l++, dp.pb(v[i]);
			prv[i] = idx[l-1];
			idx[l] = i;
		}
		else {
			int k = it - dp.begin();
			*it = v[i];
			prv[i] = idx[k-1];
			idx[k] = i;
		}
	}
	g << l << '\n';
	stack<int> stk;
	int k = idx[l];
	while (k) {stk.push(v[k]); k = prv[k];}
	while (!stk.empty()){g << stk.top() << ' '; stk.pop();}
	
	return 0;
}