Cod sursa(job #2865700)

Utilizator alextmAlexandru Toma alextm Data 9 martie 2022 09:29:43
Problema Subsir crescator maximal Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.82 kb
#include <bits/stdc++.h>
using namespace std;

const int MAXN = 1e5 + 5;

vector<int> ans, best;
int lg[MAXN], v[MAXN];

int main() {
	ifstream cin("scmax.in");
	ofstream cout("scmax.out");
	
	int n, maxlg = 0;
	cin >> n;
	for(int i = 1; i <= n; i++)
		cin >> v[i];
	
	lg[1] = 1;
	best.push_back(v[1]);
	for(int i = 2; i <= n; i++) {
		auto it = lower_bound(best.begin(), best.end(), v[i]);
		if(it == best.end()) {
			best.push_back(v[i]);
			lg[i] = (int) best.size();
			maxlg = max(maxlg, lg[i]);
			continue;
		}
		
		lg[i] = it - best.begin() + 1;
		maxlg = max(maxlg, lg[i]);
		*it = v[i]
	}
	
	int cnt = maxlg;
	cout << maxlg << '\n';
	
	for(int i = n; i >= 1; i--)
		if(lg[i] == cnt) {
			ans.push_back(v[i]);
			cnt--;
		}
		
	reverse(ans.begin(), ans.end());
	for(int elem : ans)
		cout << elem << ' ';
	cout << '\n';
	
	return 0;
}