Cod sursa(job #2755425)

Utilizator vlad082002Ciocoiu Vlad vlad082002 Data 27 mai 2021 10:55:53
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.66 kb
#include <bits/stdc++.h>
using namespace std;

typedef long long ll;

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

ll n, lng[100005], lmax, a[100005], pre[100005];

void print(int x) {
	if(pre[x]) print(pre[x]);
	fout << a[x] << ' ';
}

int main() {
	fin >> n;
	for(int i = 1; i <= n; i++)
		fin >> a[i];

	for(int i = 1; i <= n; i++) {
		ll l = 0, r = lmax, ans = -1;
		while(l <= r) {
			ll m = l+(r-l)/2;
			if(a[lng[m]] < a[i]) {
				ans = m;
				l = m+1;
			} else {
				r = m-1;
			}
		}
		lmax = max(lmax, ans+1);
		if(a[lng[ans+1]] > a[i] || lng[ans+1] == 0) {
			lng[ans+1] = i;
			pre[i] = lng[ans];
		}
	}
	fout << lmax << '\n';
	print(lng[lmax]);

}