Pagini recente » Cod sursa (job #2590146) | Cod sursa (job #1644855) | Cod sursa (job #2495016) | Cod sursa (job #404874) | Cod sursa (job #2573914)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int main() {
int n; fin >> n;
vector<int> arr(n);
for (int i = 0; i < n; i++)
fin >> arr[i];
vector<int> lis, pre(n);
for (int i = 0; i < n; i++) {
int it = lower_bound(lis.begin(), lis.end(), i, [&](int x, int y) {
return arr[x] < arr[y];
}) - lis.begin();
if (it == (int) lis.size())
lis.emplace_back();
lis[it] = i;
pre[i] = (it ? lis[it - 1] : -1);
}
vector<int> ans;
for (int i = lis.back(); i != -1; i = pre[i])
ans.push_back(arr[i]);
fout << ans.size() << '\n';
for (int i = ans.size() - 1; i >= 0; i--)
fout << ans[i] << ' ';
fout << '\n';
fout.close();
return 0;
}