Pagini recente » Monitorul de evaluare | Cod sursa (job #2023936) | Cod sursa (job #2849079) | Statistici Negreanu Vlad (negreanuvlad) | Cod sursa (job #2023974)
// Example program
#include <iostream>
#include <fstream>
#include <string>
int constexpr MAXN = 100001;
int dp[MAXN], a[MAXN], back[MAXN];
int global_max, global_pos;
int main()
{
int n;
std::ifstream in("scmax.in");
std::ofstream out("scmax.out");
in >> n;
for (int i = 0; i < n; ++i) {
in >> a[i];
back[i] = -1;
}
for (int i = 0; i < n; ++i) {
dp[i] = 1;
for (int j = 0; j < i; ++j) {
if (a[j] < a[i] && dp[j] + 1 > dp[i]) {
dp[i] = dp[j] + 1;
back[i] = j;
}
}
if (dp[i] > global_max) {
global_max = dp[i];
global_pos = i;
}
}
int curr = global_pos, curr_pos = 0;
while (curr != -1) {
dp[curr_pos++] = curr;
curr = back[curr];
}
out << global_max << "\n";
for (int i = curr_pos - 1; i >= 0; --i) {
out << a[dp[i]] << " ";
}
out << "\n";
return 0;
}