用线段树做并且将代码展示出来
时间: 2024-11-03 13:19:50 浏览: 11
快速操作-细讲线段树
线段树是一种数据结构,常用于处理区间查询的问题,如求区间和、区间最大值等。它的核心思想是将一维数组分治处理,通过建立一棵树结构来高效地存储和查询区间信息。以下是一个简单的Python线段树实现例子,假设我们要对一个整数数组进行区间和的操作:
```python
class SegmentTree:
def __init__(self, arr):
self.n = len(arr)
self.size = 1 << (self.n.bit_length() - 1) # 计算所需的节点数
self.tree = [0] * (2 * self.size) # 初始化树节点
for i in range(self.n): # 将原数组元素复制到树的第一个子层
self.tree[self.size + i] = arr[i]
for i in range(self.size - 1, 0, -1): # 建立完整棵树
self.update(i)
def update(self, idx):
left, right = idx << 1, idx << 1 | 1 # 左右孩子索引
mid = idx // 2
if left < self.size: # 如果有左孩子
self.tree[idx] += self.tree[left]
if right < self.size: # 如果有右孩子
self.tree[idx] += self.tree[right]
if mid < self.size: # 继续更新父节点直到根节点
self.update(mid)
def query(self, l, r): # 区间查询操作
res = 0
l, r = l + self.size, r + self.size
while l <= r:
if l % 2 == 1: # 当左侧有效时
res += self.tree[l]
l += 1
if r % 2 == 0: # 当右侧有效时
res += self.tree[r]
r -= 1
l //= 2
r //= 2
return res
# 示例使用
arr = [1, 3, 5, 7, 9]
seg_tree = SegmentTree(arr)
print(seg_tree.query(0, 3)) # 输出:16,即原数组[1, 3, 5, 7]的和
```
阅读全文