Pagini recente » Cod sursa (job #359013) | Cod sursa (job #2092357) | Cod sursa (job #576302) | Cod sursa (job #2883214) | Cod sursa (job #2335367)
#include <bits/stdc++.h>
int main() {
std::ifstream fin("scmax.in");
std::ofstream fout("scmax.out");
std::vector<int> lis;
std::vector<int> init_vector, ans_contribution;
int n;
fin >> n;
for(int _ = 1; _ <= n; _++) {
int x;
fin >> x;
auto it = std::lower_bound(lis.begin(), lis.end(), x);
if(it == lis.end())
lis.push_back(x);
else *it = x;
init_vector.push_back(x);
ans_contribution.push_back(it - lis.begin());
}
int ans = lis.size();
lis.clear();
for(int i = n - 1; i >= 0; i--) {
if(ans_contribution[i] == ans - 1) {
lis.push_back(init_vector[i]);
ans--;
}
}
std::reverse(lis.begin(), lis.end());
fout << lis.size() << '\n';
for(auto i: lis) fout << i << ' ';
}