Cod sursa(job #1220096)

Utilizator ptquake10ptquake10 ptquake10 Data 16 august 2014 14:44:16
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.77 kb
#include <iostream>
#include <cstdio>
#include <vector>
#include <stack>
#include <algorithm>
#include <fstream>
using namespace std;

int n, a[100010], b[100010], c[100010], k;
stack<int> s;

int bsc(int x) {
	int l = 1, r = k + 1, m;
	while (l < r) {
		m = (l+r)/2;
		if (c[m] < x) l = m+1; else r = m;
	}
	if (l > k) {
		k = l;
		return k;
	}
	return l;
}

void print_sol(int x) {
	for (int i = x; i > 0; i--)
		if (b[i] == k) {
			k--;
			print_sol(i-1);
			printf("%d ", a[i]);
		}
}

int main() {
	
	freopen("scmax.in","r",stdin);
	freopen("scmax.out","w",stdout);
	scanf("%d", &n);
	for (int i = 1; i <= n; i++) {
		scanf("%d", &a[i]);
		b[i] = bsc(a[i]);
		c[b[i]] = a[i];
	}
		
	printf("%d\n", k);
	print_sol(n);
	
	return 0;
}