Pagini recente » Cod sursa (job #523273) | Cod sursa (job #517523) | Cod sursa (job #2825773) | Cod sursa (job #1813984) | Cod sursa (job #1809785)
#include <stdio.h>
#include <algorithm>
#define NMAX 100010
using namespace std;
int V[NMAX], D[NMAX], L[NMAX], S[NMAX];
int N, i, p, best;
int main()
{
freopen("scmax.in", "r", stdin);
freopen("scmax.out", "w", stdout);
scanf("%d", &N);
for (i = 1; i <= N; i++) {
scanf("%d", &V[i]);
}
for (i = 1; i <= N; i++) {
p = lower_bound(D + 1, D + best + 1, V[i]) - D;
if (p == best + 1) {
best++;
}
D[p] = V[i];
L[i] = p;
}
p = best;
for (i = N; i > 0; i--) {
if (L[i] == p && (p == best || V[i] <= S[p + 1])) {
S[p--] = V[i];
}
}
printf("%d\n", best);
for (i = 1; i <= best; i++) {
printf("%d ", S[i]);
}
printf("\n");
return 0;
}