中间那三个数的和
数组是 17、24、15、13、23。运行下面这段程序(查下标 1 到 3):
def seg_build(a, node, l, r, tree):
if l == r:
tree[node] = a[l]
return
m = (l + r) // 2
seg_build(a, node * 2, l, m, tree)
seg_build(a, node * 2 + 1, m + 1, r, tree)
tree[node] = tree[node * 2] + tree[node * 2 + 1]
def seg_sum(node, l, r, ql, qr, tree):
if qr < l or r < ql:
return 0
if ql <= l and r <= qr:
return tree[node]
m = (l + r) // 2
return (seg_sum(node * 2, l, m, ql, qr, tree)
+ seg_sum(node * 2 + 1, m + 1, r, ql, qr, tree))
A = [17, 24, 15, 13, 23]
tree = [0] * (4 * len(A))
seg_build(A, 1, 0, len(A) - 1, tree)
print(seg_sum(1, 0, len(A) - 1, 1, 3, tree))
全部评论