Pagini recente » Cod sursa (job #552980) | Cod sursa (job #2684520) | Cod sursa (job #2332230) | Cod sursa (job #2629328) | Cod sursa (job #2721864)
#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
const int NMAX = 100005;
int lg[NMAX];
vector<int>best;
vector<int>sol;
int v[NMAX];
int n, ma = 0;
int main()
{
fin >> n;
for (int i = 1; i <= n; i++)
fin >> v[i];
lg[1] = 1;
best.push_back(v[1]);
for (int i = 2; i <= n; i++)
{
vector<int>::iterator it = lower_bound(best.begin(), best.end(), v[i]);
if (it == best.end())
{
best.push_back(v[i]);
lg[i] = best.size();
ma = max(ma, lg[i]);
continue;
}
lg[i] = it - best.begin() + 1;
ma = max(ma, lg[i]);
*it = v[i];
}
int cnt = ma;
fout << ma << '\n';
for (int i = n; i >= 1; i--)
if (lg[i] == cnt)
{
sol.push_back(v[i]);
cnt--;
}
sort(sol.begin(), sol.end());
for (int elem : sol)
fout << elem << ' ';
fout << '\n';
return 0;
}