Pagini recente » Cod sursa (job #2970642) | Cod sursa (job #457388) | Cod sursa (job #2242962) | Cod sursa (job #455189) | Cod sursa (job #533383)
Cod sursa(job #533383)
#include <iostream>
#include <fstream>
using namespace std;
int bsearch(int *A, int size, int elem) {
int i, step;
for (step = 1; step < size; step <<= 1);
for (i = size; step; step >>= 1) {
if (i-step >= 0 && elem <= A[i-step]) {
i -= step;
}
}
return i;
}
int main() {
int n;
freopen("scmax.in", "r", stdin);
freopen("scmax.out", "w", stdout);
scanf("%d", &n);
int a;
int *A = new int[n];
int size = 0;
for (int i = 0; i < n; i++) {
scanf("%d", &a);
int pos = bsearch(A, size, a);
if (pos == size) {
size ++;
}
A[pos] = a;
}
printf("%d\n", size);
for (int i = 0; i < size; ++i) {
if (i > 0) {
printf(" ");
}
printf("%d", A[i]);
}
printf("\n");
return 0;
}