树状数组
# 作用
- 单点修改
- 区间查询
# 代码模版
from typing import List
class NumArray:
def __init__(self, nums: List[int]):
self.nums = nums
self.preNums = [0]*(len(nums)+1)
for i in range(len(nums)):
self.add(i+1,nums[i])
# 从左到右获取第一个1
def lowbit(self,index:int)->int:
return index & -index
# 生成数组
def add(self,index:int, val:int):
while index < len(self.preNums):
self.preNums[index] += val
index+= self.lowbit(index)
# 计算和
def preSum(self,index:int)->int:
result = 0
while index:
result += self.preNums[index]
index -= self.lowbit(index)
return result
# 单点修改
def update(self, index: int, val: int) -> None:
self.add(index + 1, val - self.nums[index])
self.nums[index] = val
# 获取范围和
def sumRange(self, left: int, right: int) -> int:
return self.preSum(right + 1) - self.preSum(left)
上次更新: 2025/03/22, 03:52:10