Pagini recente » Cod sursa (job #2610858) | Cod sursa (job #1257548) | Cod sursa (job #2542799) | Cod sursa (job #2094739) | Cod sursa (job #1809782)
#include <stdio.h>
#define NMAX 100010
using namespace std;
int V[NMAX], D[NMAX], L[NMAX], S[NMAX];
int N, i, p, best;
int bsearch(int x) {
int s = 1, d = best, p = -1, m = 0;
while (s <= d) {
m = (s + d) >> 1;
if (D[m] >= x) {
p = m;
d = m - 1;
} else {
s = m + 1;
}
}
return p;
}
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 = bsearch(V[i]);
if (p == -1) {
best++;
p = 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;
}