Cod sursa(job #2339760)

Utilizator dahaandreiDaha Andrei Codrin dahaandrei Data 9 februarie 2019 11:41:28
Problema Subsir crescator maximal Scor 65
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.62 kb
#include <fstream>

using namespace std;

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

const int MAXN = 1e5;
const int MAXVAL = 2e9;

int n, v[MAXN + 1], dp[MAXN + 1];
int ans;

void cb(int val) {
	int ret = 0;
	int add = 1 << 30;
	while (add) {
		if (ret + add <= n && dp[ret + add] < val) ret += add;
		add >>= 1;
	}

	dp[ret + 1] = min(dp[ret + 1], val);
	ans = max(ans, ret + 1);
}

int main() {
	in >> n;
	for (int i = 1; i <= n; ++ i) in >> v[i];
	for (int i = 1; i <= n; ++ i) dp[i] = MAXVAL;

	for (int i = 1; i <= n; ++ i) cb(v[i]);
	out << ans << '\n';
	for (int i = 1; i <= ans; ++ i) out << dp[i] << ' ';

	return 0;
}