<script>
let maxN = 100;
let Tree =
new
Array(4 * maxN);
function
build(arr, index, s, e)
{
if
(s == e)
Tree[index] = arr[s];
else
{
let m = parseInt((s + e) / 2, 10);
build(arr, 2 * index, s, m);
build(arr, 2 * index + 1,
m + 1, e);
Tree[index]
= Math.max(Tree[2 * index],
Tree[2 * index + 1]);
}
}
function
atleast_x(index, s, e, ql, qr, x)
{
if
(ql > e || qr < s)
return
-1;
if
(s <= ql && e <= qr) {
if
(Tree[index] < x)
return
-1;
while
(s != e) {
let m = parseInt((s + e) / 2, 10);
if
(Tree[2 * index] >= x) {
e = m;
index = 2 * index;
}
else
{
s = m + 1;
index = 2 * index + 1;
}
}
return
s;
}
let m = parseInt((s + e) / 2, 10);
let val = atleast_x(2 * index, s,
m, ql, qr, x);
if
(val != -1)
return
val;
return
atleast_x(2 * index + 1, m + 1,
e, ql, qr, x);
}
function
update(index, s, e, new_val, pos)
{
if
(s == e)
Tree[index] = new_val;
else
{
let m = parseInt((s + e) / 2, 10);
if
(pos <= m)
{
update(2 * index, s, m,
new_val, pos);
}
else
{
update(2 * index + 1,
m + 1, e,
new_val, pos);
}
Tree[index]
= Math.max(Tree[2 * index],
Tree[2 * index + 1]);
}
}
function
printAnswer(arr, n)
{
build(arr, 1, 0, n - 1);
document.write(atleast_x(1, 0, n - 1, 0, n - 1, 2) +
"</br>"
);
arr[2] = 5;
update(1, 0, n - 1, 5, 2);
document.write(atleast_x(1, 0, n - 1, 0, n - 1, 4) +
"</br>"
);
document.write(atleast_x(1, 0, n - 1, 0, n - 1, 0) +
"</br>"
);
}
let arr = [ 1, 3, 2, 4, 6 ];
let N = arr.length;
printAnswer(arr, N);
</script>