Pagini recente » Cod sursa (job #1404410) | Cod sursa (job #946622) | Cod sursa (job #1358456) | Cod sursa (job #884220) | Cod sursa (job #3290954)
#include <bits/stdc++.h>
using namespace std;
namespace {
int n;
vector<int> v;
vector<int> dp;
vector<int> dpi;
vector<int> p;
ifstream cin("scmax.in");
ofstream cout("scmax.out");
int $main() {
cin >> n;
v.resize(n);
dp.resize(n + 1);
dpi.resize(n + 1);
p.resize(n);
for (auto &x : v) {
cin >> x;
}
int inf = 2e9 + 2;
fill(dp.begin() + 1, dp.end(), inf);
dp[0] = -inf;
dp[1] = v[0];
dpi[1] = 0;
p[0] = -1;
int lmax = 1;
int ilmax = 0;
for (int i = 1; i < n; ++i) {
int j = n
- (upper_bound(dp.rbegin(), dp.rend(), v[i], greater{})
- dp.rbegin());
dp[j + 1] = v[i];
dpi[j + 1] = i;
p[i] = dpi[j];
if (j + 1 >= lmax) {
lmax = j + 1;
ilmax = i;
}
}
cout << lmax << "\n";
vector<int> ans(lmax);
for (int i = lmax, j = ilmax; i >= 1; --i) {
ans[i - 1] = v[j];
j = p[j];
}
for (auto x : ans) {
cout << x << " ";
}
cout << endl;
return 0;
}
} // namespace
int main() {
return $main();
}