Cod sursa(job #936532)

Utilizator forgetHow Si Yu forget Data 7 aprilie 2013 15:46:19
Problema Subsir crescator maximal Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.67 kb
#include <fstream>
#include <algorithm>
#include <vector>
using namespace std;

int main() {
	ifstream fin("scmax.in");
	ofstream fout("scmax.out");
	int n;
	fin >> n;

	int a[n], b[n];
	vector<int> min;
	vector<int>::iterator it;
	for (int i = 0; i < n; ++i) {
		fin >> a[i];
		it = lower_bound(min.begin(), min.end(), a[i]);
		if (it != min.end()) {
			*it = a[i];
			b[i] = it-min.begin()+1;
		}
		else {
			min.push_back(a[i]);
			b[i] = min.size();
		}
	}
	int ans = min.size();
	int sub[ans];
	for (int i = n-1, j = ans; j > 0; --i)
		if (b[i] == j && a[i] < sub[j])
			sub[--j] = a[i];

	fout << ans << '\n';
	for (int i = 0; i < ans; ++i)
		fout << sub[i] << ' ';
	return 0;
}