Pagini recente » Cod sursa (job #2183936) | Cod sursa (job #3192328) | Cod sursa (job #1923721) | Cod sursa (job #1882096) | Cod sursa (job #755881)
Cod sursa(job #755881)
#include <cstdio>
#include <algorithm>
#define DMAX 5005
using namespace std;
int A [DMAX], B [DMAX], sol [DMAX];
int nume [DMAX] [DMAX];
int main () {
freopen ("subsir2.in", "r", stdin);
freopen ("subsir2.out", "w", stdout);
int n, i, j;
scanf ("%d", &n);
for (i = 1; i <= n; ++ i) {
scanf ("%d", &A [i]);
B [i] = A [i];
}
sort (B + 1, B + n + 1);
for (i = 1; i <= n; ++ i)
for (j = 1; j <= n; ++ j) {
if( A [i] == B [j])
nume [i] [j] = nume [i - 1] [j - 1] + 1;
else
nume [i] [j] = max (nume [i - 1] [j], nume [i] [j - 1]);
}
for (i = n, j = n; i && j;) {
if (A [i] == B [j]) {
sol [++ sol [0]] = A [i];
-- i; -- j;
}
else {
if (nume [i - 1] [j] > nume [i] [j - 1]) -- i;
else -- j;
}
}
printf ("%d\n", nume [n] [n]);
for (i = sol [0]; i >= 1; -- i)
printf ("%d ", sol [i]);
printf ("\n");
}