Cod sursa(job #1021042)

Utilizator dan.lincanDan Lincan dan.lincan Data 3 noiembrie 2013 03:10:20
Problema Subsir crescator maximal Scor 35
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <set>

using namespace std;

// http://www.geeksforgeeks.org/longest-monotonically-increasing-subsequence-size-n-log-n/
int n;
vector<int> a;
vector<int> end;

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

template<class T>
void pv(vector<T> &a, ostream &Out = out)
{
	for(const auto &v : a)
		Out << v << " ";
	Out << "\n";
}

void read(istream &In = in)
{
	In >> n;
	a.resize(n);
	for(int i = 0; i < n; ++i)
	{
		In >> a[i];
	}
}

set<int> solve()
{
	set<int> s;
	for(int i = 0; i < n; ++i)
	{
		s.insert(a[i]);
		auto it = s.find(a[i]);
		++it;
		if(it != s.end()) s.erase(it);
	}
	return s; // ok - no copy in c++11
}

void print_result(set<int> &longest_segment, ostream &Out = out)
{
	Out << longest_segment.size() << endl;
	for(int v : longest_segment)
		Out << v << " ";
	Out << endl;
}

int main()
{
	read();
	auto result = solve();
	print_result(result);
	return 0;
}