Pagini recente » Istoria paginii runda/test12321321 | Cod sursa (job #1021042)
#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;
}