Cod sursa(job #2195851)

Utilizator flibiaVisanu Cristian flibia Data 17 aprilie 2018 15:30:22
Problema Subsir crescator maximal Scor 65
Compilator cpp Status done
Runda Arhiva educationala Marime 0.58 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, idx[N];

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;
	}
	out << vf << '\n';
	for(int i = 1; i <= vf; i++)
		out << a[idx[i]] << ' ';
	return 0;
}