Pagini recente » simulare_oji_2024_clasele_11_12_16_februarie | Cod sursa (job #1768238) | Cod sursa (job #379870) | Cod sursa (job #2456906) | Cod sursa (job #3292379)
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int n;
fin >> n;
vector<int> v(n);
for (int i = 0; i < n; ++i)
fin >> v[i];
vector<int> prev(n, -1);
vector<int> tail, index;
tail.reserve(n);
index.reserve(n);
for (int i = 0; i < n; ++i) {
int pos = lower_bound(tail.begin(), tail.end(), v[i]) - tail.begin();
if (pos == tail.size()) {
tail.push_back(v[i]);
index.push_back(i);
} else {
tail[pos] = v[i];
index[pos] = i;
}
if (pos > 0)
prev[i] = index[pos - 1];
}
vector<int> res;
int j = index.back();
while (j != -1) {
res.push_back(v[j]);
j = prev[j];
}
fout << res.size() << '\n';
for (auto it = res.rbegin(); it != res.rend(); ++it)
fout << *it << ' ';
fout << '\n';
fin.close();
fout.close();
return 0;
}