Cod sursa(job #2195854)

Utilizator flibiaVisanu Cristian flibia Data 17 aprilie 2018 15:32:02
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.65 kb
#pragma GCC optimize("03")
#include <bits/stdc++.h>
#define N 100100

using namespace std;

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

int n, a[N], st, dr, mid, vf, prv[N], idx[N];

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

int main(){
	in >> n;
	for(int i = 1; i <= n; i++)
		in >> a[i];
	idx[vf = 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;
		}
		vf = max(st, vf);
		idx[st] = i;
		prv[i] = idx[st - 1];
	}
	out << vf << '\n';
	rec(idx[vf]);
	return 0;
}