D001单修区查,单查区修,区查区修模板,如何为?

摘要:树状数组(Binary Indexed Tree, BIT,也称 Fenwick Tree)是算法竞赛中极其常用的数据结构。它的核心优势在于:代码短小精悍、常数极小、内存占用少。 虽然它的功能是线段树的子集,但在处理“动态前缀和”相关问题时
树状数组(Binary Indexed Tree, BIT,也称 Fenwick Tree)是算法竞赛中极其常用的数据结构。它的核心优势在于:代码短小精悍、常数极小、内存占用少。 虽然它的功能是线段树的子集,但在处理“动态前缀和”相关问题时,BIT 通常是首选。 来自董晓算法,对两个关键函数原理的图解 BIT 结构模板为 class BIT: def __init__(self, n): self.tree = [0] * (n + 1) # 初始化为一颗空树 def add(self, i, val): while i < len(self.tree): self.tree[i] += val i += i & -i def sum(self, i): s = 0 while i > 0: s += self.tree[i] i -= i & -i return s def query(self, l, r): # 查询区间为 [l, r] return self.sum(r) - self.sum(l - 1) 已知大小为 \(n\) 的数组,有两种初始化方式一种为 \(O(n\log n)\) 一种为 \(O(n)\) 。
阅读全文