Pagini recente » Cod sursa (job #1278770) | Cod sursa (job #471468) | Cod sursa (job #222259) | Cod sursa (job #2434928) | Cod sursa (job #1448920)
#include <iostream>
using namespace std;
int N, *A, *L, maxx, Lmax;
void dinamica() {
L = new int[N + 1];
L[N] = 1;
for (int i = N - 1; i >= 1; --i) {
maxx = 0;
for (int j = i + 1; j <= N; ++j) {
if (L[j] > maxx && A[i] <= A[j]) {
maxx = L[j];
}
}
L[i] = maxx + 1;
if (Lmax < L[i]) {
Lmax = L[i];
}
}
}
void drum() {
cout << Lmax << "\n";
int Lseq = Lmax, t = 1, p = 1;
do {
while (!(Lseq == L[p] && A[t] <= A[p])) {
p++;
}
cout << A[p] << " ";
t = p;
--Lseq;
} while (Lseq > 0);
}
int main()
{
freopen("scmax.in", "r", stdin);
freopen("scmax.out", "w", stdout);
cin >> N;
A = new int[N + 1];
for (int i = 1; i <= N; ++i) {
cin >> A[i];
}
dinamica();
drum();
delete [] A;
delete [] L;
return 0;
}