Cod sursa(job #2333770)

Utilizator flibiaVisanu Cristian flibia Data 1 februarie 2019 22:10:35
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.57 kb
#include <bits/stdc++.h>

using namespace std;

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

int n, a[100100], st, dr, mid, v[100100], tp, pv[100100];

void rec(int p) {
	if (p == 0)
		return;
	rec(pv[p]);
	out << a[p] << ' ';
}

int main() {
	in >> n;
	for (int i = 1; i <= n; i++)
		in >> a[i];
	v[++tp] = 1;
	for (int i = 2; i <= n; i++) {
		st = 1;
		dr = tp;
		while (st <= dr) {
			mid = st + dr >> 1;
			if (a[v[mid]] >= a[i])
				dr = mid - 1;
			else st = mid + 1;
		}
		v[st] = i;
		pv[i] = v[st - 1];
		tp = max(tp, st);
	}
	out << tp << '\n';
	rec(v[tp]);
	return 0;
}