# 线段树
# 对于满二叉树来说,当前节点下标i, 左儿子下标2i+1, 右儿子下标2i+2
# 0
# 1 2
# 3 4 5 6
def build_tree(arr, tree, node, start, end): # node为根节点下标
if start == end:
tree[node] = arr[start]
return
mid = start + (end - start) // 2
left_node = 2 * node + 1
right_node = 2 * node + 2
build_tree(arr, tree, left_node, start, mid)
build_tree(arr, tree, right_node, mid + 1, end)
tree[node] = tree[left_node] + tree[right_node]
def update_tree(arr, tree, node, start, end, idx, value): # 更新arr[idx]=value
if start == end:
arr[idx] = value
tree[node] = value
return
mid = start + (end - start) // 2
left_node = 2 * node + 1
right_node = 2 * node + 2
if mid >= idx
线段树代码
于 2021-11-30 15:41:40 首次发布