Pagini recente » Cod sursa (job #1919053) | Cod sursa (job #2701594) | Cod sursa (job #1084363) | Cod sursa (job #2466695) | Cod sursa (job #2522616)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream in("scmax.in");
ofstream out("scmax.out");
int main() {
int n;
in >> n;
vector <int> a(n);
vector <pair <int, int> > dp(n, {1, -1});
for (int i = 0; i < n; i++) {
in >> a[i];
}
for (int i = 1; i < n; i++) {
for (int j = 0; j < i; j++) {
if (a[j] < a[i] && dp[j].first + 1 > dp[i].first) {
dp[i] = {dp[j].first + 1, j};
}
}
}
int idx_sol = 0;
for (int i = 1; i < n; i++) {
if (dp[i].first > dp[idx_sol].first)
idx_sol = i;
}
vector <int> sol;
int curr_idx = idx_sol;
while (curr_idx != -1) {
sol.push_back(a[curr_idx]);
curr_idx = dp[curr_idx].second;
}
out << dp[idx_sol].first << '\n';
for (int i = sol.size() - 1; i >= 0; i--) {
out << sol[i] << ' ';
}
return 0;
}