Pagini recente » Cod sursa (job #2626461) | Cod sursa (job #241184) | Cod sursa (job #2895300) | Cod sursa (job #255817) | Cod sursa (job #3165546)
#include <iostream>
#include <fstream>
#include <stack>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
const int NMAX = 1e5 + 5;
int v[NMAX], dp[NMAX], prv[NMAX];
int main() {
int n, nmax = 0, last_ind = 0;
fin >> n;
for (int i = 1; i <= n; i++) {
fin >> v[i];
dp[i] = 1;
prv[i] = 0;
for (int j = 1; j < i; j++) {
if (v[j] < v[i]) {
if (dp[j] + 1 > dp[i]) {
dp[i] = dp[j] + 1;
prv[i] = j;
}
}
}
if (dp[i] > nmax) {
nmax = dp[i];
last_ind = i;
}
}
stack<int> res;
while (last_ind != 0) {
res.push(v[last_ind]);
last_ind = prv[last_ind];
}
fout << nmax << '\n';
while (!res.empty()) {
fout << res.top() << ' ';
res.pop();
}
return 0;
}