class SegmentTree:
def __init__(self, nums):
self.n = len(nums)
self.tree = [0] * (2 * self.n)
self.build(nums)
def build(self, nums):
for i in range(self.n):
self.tree[self.n + i] = nums[i]
for i in range(self.n - 1, 0, -1):
self.tree[i] = self.tree[2 * i] + self.tree[2 * i + 1]
print(self.tree)
def update(self, idx, val):
idx += self.n
self.tree[idx] = val
while idx > 1:
idx //= 2
self.tree[idx] = self.tree[2 * idx] + self.tree[2 * idx + 1]
def query(self, l, r):
l += self.n
r += self.n
sums = 0
while l <= r:
if l % 2 == 1:
sums += self.tree[l]
l += 1
if r % 2 == 0:
sums += self.tree[r]
r -= 1
l //= 2
r //= 2
return sums
nums = [1, 3, 5, 7, 9, 11]
segment_tree = SegmentTree(nums)
queries = [(0, 2), (1, 4), (2, 5)]
for query in queries:
left, right = query
result = segment_tree.query(left, right)
Y2xhc3MgU2VnbWVudFRyZWU6CiAgICBkZWYgX19pbml0X18oc2VsZiwgbnVtcyk6CiAgICAgICAgc2VsZi5uID0gbGVuKG51bXMpCiAgICAgICAgc2VsZi50cmVlID0gWzBdICogKDIgKiBzZWxmLm4pCiAgICAgICAgc2VsZi5idWlsZChudW1zKQoKICAgIGRlZiBidWlsZChzZWxmLCBudW1zKToKICAgICAgICBmb3IgaSBpbiByYW5nZShzZWxmLm4pOgogICAgICAgICAgICBzZWxmLnRyZWVbc2VsZi5uICsgaV0gPSBudW1zW2ldCiAgICAgICAgZm9yIGkgaW4gcmFuZ2Uoc2VsZi5uIC0gMSwgMCwgLTEpOgogICAgICAgICAgICBzZWxmLnRyZWVbaV0gPSBzZWxmLnRyZWVbMiAqIGldICsgc2VsZi50cmVlWzIgKiBpICsgMV0KICAgICAgICBwcmludChzZWxmLnRyZWUpCgogICAgZGVmIHVwZGF0ZShzZWxmLCBpZHgsIHZhbCk6CiAgICAgICAgaWR4ICs9IHNlbGYubgogICAgICAgIHNlbGYudHJlZVtpZHhdID0gdmFsCiAgICAgICAgd2hpbGUgaWR4ID4gMToKICAgICAgICAgICAgaWR4IC8vPSAyCiAgICAgICAgICAgIHNlbGYudHJlZVtpZHhdID0gc2VsZi50cmVlWzIgKiBpZHhdICsgc2VsZi50cmVlWzIgKiBpZHggKyAxXQoKICAgIGRlZiBxdWVyeShzZWxmLCBsLCByKToKICAgICAgICBsICs9IHNlbGYubgogICAgICAgIHIgKz0gc2VsZi5uCiAgICAgICAgc3VtcyA9IDAKICAgICAgICB3aGlsZSBsIDw9IHI6CiAgICAgICAgICAgIGlmIGwgJSAyID09IDE6CiAgICAgICAgICAgICAgICBzdW1zICs9IHNlbGYudHJlZVtsXQogICAgICAgICAgICAgICAgbCArPSAxCiAgICAgICAgICAgIGlmIHIgJSAyID09IDA6CiAgICAgICAgICAgICAgICBzdW1zICs9IHNlbGYudHJlZVtyXQogICAgICAgICAgICAgICAgciAtPSAxCiAgICAgICAgICAgIGwgLy89IDIKICAgICAgICAgICAgciAvLz0gMgogICAgICAgIHJldHVybiBzdW1zCgoKbnVtcyA9IFsxLCAzLCA1LCA3LCA5LCAxMV0Kc2VnbWVudF90cmVlID0gU2VnbWVudFRyZWUobnVtcykKcXVlcmllcyA9IFsoMCwgMiksICgxLCA0KSwgKDIsIDUpXQpmb3IgcXVlcnkgaW4gcXVlcmllczoKICAgIGxlZnQsIHJpZ2h0ID0gcXVlcnkKICAgIHJlc3VsdCA9IHNlZ21lbnRfdHJlZS5xdWVyeShsZWZ0LCByaWdodCkK
[0, 36, 32, 4, 12, 20, 1, 3, 5, 7, 9, 11]