Pagini recente » Cod sursa (job #1352200) | Cod sursa (job #231523) | Cod sursa (job #378644) | Cod sursa (job #3146455) | Cod sursa (job #387368)
Cod sursa(job #387368)
#include<stdio.h>
#include<string.h>
#define N 100002
int v[N], a[N], tata[N], q[N], n, i, u;
int cautbin(int x){
int l, r, mij, last = 0;
for (l = 0, r = n; l <= r; ){
mij = (l+r) / 2;
if (v[mij] != -1){
if (a[v[mij]] < x) last = mij, l = mij+1;
else r = mij - 1;
}
else r = mij - 1;
}
return last;
}
int main (){
int poz, max;
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
scanf("%d", &n);
for (i = 1; i <= n; i++) scanf("%d", &a[i]);
memset(v, -1, sizeof(v)); v[0] = 0;
for (i = 1; i <= n; i++){
poz = cautbin(a[i]);
if (v[poz + 1] == -1 || a[v[poz + 1]] > a[i]){
if (v[poz + 1] == -1) max = poz + 1;
v[poz + 1] = i;
tata[i] = v[poz];
}
}
printf("%d\n", max);
for (i = v[max]; i > 0; i = tata[i])
q[++u] = a[i];
for (; u; u--)
printf("%d ", q[u]);
return 0;
}