<script>
function
construct_segment_tree(segtree, a, n)
{
for
(let i = 0; i < n; i++)
segtree[n + i] = a[i];
for
(let i = n - 1; i >= 1; i--)
segtree[i] = Math.max(segtree[2 * i],
segtree[2 * i + 1]);
}
function
update(segtree, pos, value, n)
{
pos += n;
segtree[pos] = value;
while
(pos > 1)
{
pos >>= 1;
segtree[pos] = Math.max(segtree[2 * pos],
segtree[2 * pos + 1]);
}
}
function
range_query(segtree, left, right, n)
{
left += n;
right += n;
let ma = Number.MIN_VALUE;
while
(left < right)
{
if
((left & 1) != 0)
{
ma = Math.max(ma, segtree[left]);
left++;
}
if
((right & 1) > 0)
{
right--;
ma = Math.max(ma, segtree[right]);
}
left = parseInt(left / 2, 10);
right = parseInt(right / 2, 10);
}
return
ma;
}
let a = [ 2, 6, 10, 4, 7, 28, 9, 11, 6, 33 ];
let n = a.length;
let segtree =
new
Array(2 * n);
construct_segment_tree(segtree, a, n);
let left = 1, right = 5;
document.write(
"Maximum in range "
+ left +
" to "
+ right +
" is "
+
range_query(segtree, left, right + 1, n) +
"</br>"
);
let index = 5, value = 32;
update(segtree, index, value, n);
left = 2, right = 8;
document.write(
"Maximum in range "
+ left +
" to "
+ right +
" is "
+
range_query(segtree, left, right + 1, n) +
"</br>"
);
</script>