<script>
let MAXN = 500001
function
buildTree(arr, tree, s, e, index) {
if
(s == e) {
tree[index] = arr[s];
return
;
}
let mid = Math.floor((s + e) / 2);
buildTree(arr, tree, s, mid, 2 * index + 1);
buildTree(arr, tree, mid + 1, e, 2 * index + 2);
tree[index] = Math.max(tree[2 * index + 1], tree[2 * index + 2]);
}
function
query(tree, s, e, index, l, r) {
if
(l > e || r < s) {
return
Number.MIN_SAFE_INTEGER;
}
if
(l <= s && r >= e) {
return
tree[index];
}
let mid = Math.floor((s + e) / 2);
let left = query(tree, s, mid,
2 * index + 1, l, r);
let right = query(tree, mid + 1, e, 2 * index + 2, l, r);
return
Math.max(left, right);
}
function
updateArray(arr, K) {
let tree =
new
Array(MAXN).fill(0);
let N = arr.length;
buildTree(arr, tree, 0, N - 1, 0);
for
(let i = 0; i < N; ++i) {
if
(i == 0) {
document.write(query(tree, 0, N - 1, 0, 1, Math.min(i + K, N - 1)) +
' '
);
continue
;
}
if
(i == N - 1) {
document.write(query(tree, 0, N - 1, 0, Math.max(0, i - K), N - 2));
continue
;
}
let left = query(tree, 0, N - 1, 0, Math.max(i - K, 0), i - 1);
let right = query(tree, 0, N - 1, 0, i + 1, Math.min(i + K, N - 1));
document.write(Math.max(left, right) +
' '
);
}
}
let arr = [12, 5, 3, 9, 21, 36, 17];
let K = 2;
updateArray(arr, K);
</script>