Pagini recente » Cod sursa (job #2293692) | Cod sursa (job #2355572) | Cod sursa (job #516437) | Cod sursa (job #2884299) | Cod sursa (job #2207107)
#include <algorithm>
#include <fstream>
#include <stack>
// A is 1-indexed.
const size_t MAX_N = 100000 + 1;
int N, A[MAX_N], L[MAX_N], P[MAX_N];
int main()
{
std::ifstream fin("scmax.in");
std::ofstream fout("scmax.out");
int N;
fin >> N;
for (int i = 1; i <= N; ++i)
fin >> A[i];
L[0] = P[0] = 0;
int max = 0;
for (int i = 1; i <= N; ++i) {
int best = 0;
for (int j = 1; j < i; ++j)
if (L[best] < L[j] && A[j] < A[i])
best = j;
L[i] = L[best] + 1;
P[i] = best;
if (L[max] < L[i])
max = i;
}
fout << L[max] << '\n';
std::stack<int> s;
while (max != 0) {
s.push(max);
max = P[max];
}
while (!s.empty()) {
fout << A[s.top()] << ' ';
s.pop();
}
return 0;
}