Pagini recente » Cod sursa (job #2395711) | Cod sursa (job #2534160) | Cod sursa (job #2183811) | Cod sursa (job #1960982) | Cod sursa (job #2679687)
#include <iostream>
#include <fstream>
#include <vector>
const int NMAX = 1e5;
int n;
int a[1 + NMAX];
int dp[1 + NMAX];
int prev[1 + NMAX];
void read() {
std::ifstream in("scmax.in");
in >> n;
for (int i = 1; i <= n; ++i)
in >> a[i];
in.close();
}
int main() {
read();
dp[1] = 1;
prev[1] = -1;
for (int i = 2; i <= n; ++i) {
dp[i] = 1;
prev[i] = -1;
for (int j = 1; j < i; ++j) {
if (a[j] < a[i] && dp[j] + 1 > dp[i]) {
dp[i] = dp[j] + 1;
prev[i] = j;
}
}
}
int mx = -1, pos = -1;
for (int i = 1; i <= n; ++i) {
if (dp[i] > mx) {
mx = dp[i];
pos = i;
}
}
std::vector<int> sol;
while(pos != -1) {
sol.push_back(a[pos]);
pos = prev[pos];
}
std::ofstream out("scmax.out");
out << mx << '\n';
for (int i = (int)sol.size() - 1; i >= 0; --i)
out << sol[i] << ' ';
out.close();
return 0;
}