Cod sursa(job #2231585)

Utilizator flibiaVisanu Cristian flibia Data 14 august 2018 23:04:38
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.62 kb
#include <bits/stdc++.h>

using namespace std;

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

int n, a[100100], idx[100100], st, dr, mid, vf, 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];
	vf = 1;
	idx[1] = 1;
	for(int i = 2; i <= n; i++){
		st = 1;
		dr = vf;
		while(st <= dr){
			mid = st + dr >> 1;
			if(a[i] <= a[idx[mid]])
				dr = mid - 1;
			else st = mid + 1;
		}
		pv[i] = idx[st - 1];
		idx[st] = i;
		vf = max(vf, st);
	}
	out << vf << '\n';
	rec(idx[vf]);
	return 0;
}