Pagini recente » Cod sursa (job #3188091) | Cod sursa (job #2277609) | Cod sursa (job #374357) | Cod sursa (job #3267712) | Cod sursa (job #275481)
Cod sursa(job #275481)
#include<stdio.h>
#include<string.h>
#define N 100002
int v[N], a[N], tata[N], q[N], n, i, u;
inline int cautbin(int x){
int lo, hi, mid, last = 0;
for (lo = 0, hi = n; lo <= hi; ){
mid = lo + (hi-lo) / 2;
if (v[mid] != -1){
if (a[v[mid]] < x) last = mid, lo = mid+1;
else hi = mid - 1;
}
else hi = mid-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];
}
}
for (i = v[max]; i > 0; i = tata[i])
q[++u] = a[i];
printf("%d\n", max);
for (; u; u--)
printf("%d ", q[u]);
return 0;
}