Pagini recente » Cod sursa (job #181602) | Cod sursa (job #2831893) | Cod sursa (job #2971758) | Cod sursa (job #449650) | Cod sursa (job #533385)
Cod sursa(job #533385)
#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;
int size_max = 0;
for (int i = 0; i < n; i++) {
scanf("%d", &a);
int pos = bsearch(A, size, a);
A[pos] = a;
size = pos+1;
if (size > size_max) {
size_max = size;
}
}
printf("%d\n", size);
for (int i = 0; i < size; ++i) {
printf("%d ", A[i]);
}
printf("\n");
return 0;
}