Pagini recente » Cod sursa (job #2467932) | Cod sursa (job #579066) | Cod sursa (job #2530850) | Cod sursa (job #2810602) | Cod sursa (job #1495574)
#include <cstdio>
using namespace std;
int v[100001], q[100001];
int bs(int st, int dr, int val) {
int med;
while(st <= dr) {
med = st + (dr - st) / 2;
if(q[med] >= val) {
dr = med - 1;
} else {
st = med + 1;
}
}
return st;
}
int main() {
freopen("scmax.in", "r", stdin);
freopen("scmax.out", "w", stdout);
int n, ln = 0, poz;
scanf("%d", &n);
for(int i = 1; i <= n; ++ i) {
scanf("%d", &v[i]);
}
for(int i = 1; i <= n; ++ i) {
poz = bs(1, ln, v[i]);
q[poz] = v[i];
if(poz > ln)
++ ln;
}
printf("%d\n", ln);
for(int i = 1; i <= ln; ++ i) {
printf("%d ", q[i]);
}
return 0;
}