Pagini recente » Cod sursa (job #1157076) | Cod sursa (job #171636) | Cod sursa (job #86852) | Cod sursa (job #2227189) | Cod sursa (job #3290953)
#include <bits/stdc++.h>
using namespace std;
namespace {
int n;
vector<int> v;
vector<int> dp;
vector<int> dpi;
vector<vector<int>> prev;
ifstream cin("scmax.in");
ofstream cout("scmax.out");
int $main() {
cin >> n;
v.resize(n);
dp.resize(n + 1);
dpi.resize(n + 1);
for (auto &x : v) {
cin >> x;
}
prev.resize(n + 2);
for (auto &vec : prev) {
vec.resize(n + 2);
}
int inf = 2e9 + 2;
fill(dp.begin() + 1, dp.end(), inf);
dp[0] = -inf;
dp[1] = v[0];
dpi[1] = 0;
prev[1][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;
if (j + 1 >= lmax) {
lmax = j + 1;
ilmax = i;
prev[lmax][i] = dpi[j];
}
}
cout << lmax << "\n";
vector<int> ans(lmax);
for (int i = lmax, j = ilmax; i >= 1; --i) {
ans[i - 1] = v[j];
j = prev[i][j];
}
for (auto x : ans) {
cout << x << " ";
}
cout << endl;
return 0;
}
} // namespace
int main() {
return $main();
}