Pagini recente » Cod sursa (job #2660686) | Cod sursa (job #2710270) | Cod sursa (job #2050903) | Cod sursa (job #1969409) | Cod sursa (job #1452770)
#include <stdio.h>
#include <vector>
#define FOR(i, n) for (int i = 0 ; i < (n); ++ i)
using namespace std;
const int possib = 100003;
int A[possib], op[possib], n, pre[possib], Optim, Poss;
int main(){
freopen ("scmax.in", "r", stdin);
freopen ("scmax.out", "w", stdout);
scanf ("%d", &n);
FOR(i, n)
scanf ("%d", &A[i]), op[i] = 1, pre[i] = i;
FOR(i, n){
op[i] = 1;
pre[i] = -1;
FOR(j, i)
if (A[j] < A[i] && op[i] < op[j] + 1)
op[i] = op[j] + 1, pre[i] = j;
if (op[i] > Optim)
Optim = op[i], Poss = i;
}
printf ("%d\n", Optim);
vector <int> pri(Optim);
for (; pre[Poss] >= 0; Poss = pre[Poss])
pri[--Optim] = A[Poss];
pri[0] = A[Poss];
for (const auto it : pri)
printf ("%d ", it);
return 0;
}