Pagini recente » Cod sursa (job #1517171) | Cod sursa (job #2918355) | Cod sursa (job #1621425) | Cod sursa (job #1074400) | Cod sursa (job #1701686)
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <cstring>
using namespace std;
#define NMAX 100000
#define IN "scmax.in"
#define OUT "scmax.out"
#define NO_PI -1
#define max(a,b) ((a) > (b)) ? (a) : (b)
int A[NMAX], PI[NMAX], BEST[NMAX];
int N;
int best, best_tail;
inline void read_data()
{
freopen(IN, "r", stdin);
scanf("%d", &N);
printf("%d\n", N);
for (int i = 0; i < N; ++i)
scanf("%d", &A[i]);
fclose(stdin);
}
inline void reconstruct(int i)
{
if (i == NO_PI)
return;
reconstruct(PI[i]);
printf("%d ", A[i]);
}
inline void comp()
{
PI[0] = NO_PI;
BEST[0] = 1;
best = 1;
best_tail = 1;
for (int i = 1; i < N; ++i) {
PI[i] = NO_PI, BEST[i] = 1;
for (int j = i - 1; j >= 0; --j) {
if (A[j] >= A[i])
continue;
if (BEST[j] + 1 > BEST[i]) {
BEST[i] = BEST[j] + 1;
PI[i] = j;
}
}
if (BEST[i] > best) {
best = BEST[i];
best_tail = i;
}
}
}
int main()
{
read_data();
comp();
freopen(OUT, "w", stdout);
printf("%d\n", best);
reconstruct(best_tail);
printf("\n");
fclose(stdout);
return 0;
}