Cod sursa(job #1293643)

Utilizator ptquake10ptquake10 ptquake10 Data 16 decembrie 2014 11:46:08
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.14 kb
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <map>
#include <vector>
#include <stack>
#include <iostream>
#include <set>
#include <map>
#include <queue>
#include <string>
#include <sstream>
#include <algorithm>
#include <exception>
using namespace std;

int n;

class Solution {
	public:
	void scmax(vector<int> &a) {
		vector<int> b, c;
		for (int i = 0; i < a.size(); i++) {
			vector<int>::iterator it = lower_bound(c.begin(), c.end(), a[i]);
			b.push_back(distance(c.begin(), it));
			if (it == c.end()) {
				c.push_back(a[i]);
			} else {
				*it = a[i];
			}
		}
		vector<int> sol;
		int k = c.size() - 1;
		for (int i = b.size() - 1; i >= 0; i--) {
			if (b[i] == k) {
				sol.push_back(a[i]);
				--k;
			}
		}
		reverse(sol.begin(), sol.end());
		printf("%d\n", c.size());
		for (int i = 0; i < sol.size(); i++) {
			printf("%d ", sol[i]);
		}
	}
};

int main() {
	freopen("scmax.in","r",stdin);
	freopen("scmax.out","w",stdout);
	vector<int> a;
	scanf("%d", &n);
	a.resize(n);
	for (int i = 0; i < n; i++) {
		scanf("%d", &a[i]);
	}
	Solution s;
	s.scmax(a);

	return 0;
}