Cod sursa(job #2082123)

Utilizator flibiaVisanu Cristian flibia Data 5 decembrie 2017 18:51:39
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.76 kb
#include <bits/stdc++.h>

using namespace std;

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

int n, a[100100], idx[100100], pv[100100], bst, st, dr, mid, sz, sol[100100], cnt, p;

int bin(int nr){
	st = 1; dr = sz;
	while(st <= dr){
		mid = st + dr >> 1;
		if(nr <= a[idx[mid]])
			dr = mid - 1;
		else 
			st = mid + 1;
	}
	return st;
}

int main(){
	in >> n;
	for(int i = 1; i <= n; i++)
		in >> a[i];
	idx[1] = 1; 
	sz = 1;
	for(int i = 2; i <= n; i++){
		bst = bin(a[i]);
		idx[bst] = i;
		pv[i] = idx[bst - 1];
		sz = max(sz, bst);
	}
	p = idx[sz];
	while(p){
		sol[++cnt] = a[p];
		p = pv[p];
	}
	sort(sol + 1, sol + cnt + 1);
	out << cnt << '\n';
	for(int i = 1; i <= cnt; i++)
		out << sol[i] << ' ';
	return 0;
}