class SegmentTree {
int size;
int[] tree;
SegmentTree(int n) {
size = 1;
while (size < n) size *= 2;
tree = new int[2 * size];
}
void set(int index, int value) {
index += size;
tree[index] = value;
for (index /= 2; index > 0; index /= 2) tree[index] = merge(tree[2 * index], tree[2 * index + 1]);
}
}
class SegmentTree:
def __init__(self, n: int):
self.size = 1
while self.size < n:
self.size *= 2
self.tree = [0] * (2 * self.size)
def set(self, index: int, value: int) -> None:
index += self.size
self.tree[index] = value
index //= 2
while index:
self.tree[index] = merge(self.tree[2 * index], self.tree[2 * index + 1])
index //= 2
final class SegmentTree(n: Int):
private var size = 1
while size < n do size *= 2
private val tree = Array.fill(2 * size)(0)
def set(index0: Int, value: Int): Unit =
var index = index0 + size
tree(index) = value
index /= 2
while index > 0 do
tree(index) = merge(tree(2 * index), tree(2 * index + 1))
index /= 2
class SegmentTree {
int size = 1;
std::vector<int> tree;
public:
explicit SegmentTree(int n) {
while (size < n) size *= 2;
tree.assign(2 * size, 0);
}
void set(int index, int value) {
index += size;
tree[index] = value;
for (index /= 2; index > 0; index /= 2) tree[index] = merge(tree[2 * index], tree[2 * index + 1]);
}
};