线段树与树状数组的基本概念线段树的定义与核心思想基于二叉树结构支持区间查询与更新操作适用于动态维护区间信息。树状数组的定义与核心思想基于二进制索引的低位技术高效处理前缀和与单点更新空间复杂度更低。数据结构设计对比存储结构差异线段树使用显式二叉树或数组模拟需 $O(4n)$ 空间树状数组使用紧凑数组仅需 $O(n)$ 空间。操作复杂度分析线段树查询/更新为 $O(\log n)$支持任意区间操作树状数组查询/更新为 $O(\log n)$但区间操作受限如需差分技巧。功能支持范围线段树支持区间覆盖、最值、求和等复杂操作树状数组专注前缀和与单点修改衍生功能。典型应用场景线段树适用场景动态区间最值如RMQ、区间修改如延迟标记、二维空间划分如矩形面积并。树状数组适用场景高频单点更新与前缀统计如逆序对计数、离线查询优化如扫描线算法辅助。实现示例与性能优化线段树模板代码片段struct SegmentTree { int l, r, sum; int lazy; // 延迟标记 void update(int val) { sum (r - l 1) * val; lazy val; } } tree[N2];树状数组模板代码片段int BIT[N]; void update(int x, int val) { while (x n) BIT[x] val, x x -x; }优化技巧线段树动态开点节省空间树状数组扩展实现区间加减结合差分数组。选择策略与总结数据结构选择依据根据问题需求权衡功能复杂性线段树 vs 代码简洁性与效率树状数组。混合使用案例结合线段树的区间处理能力与树状数组的低常数解决多维问题如三维偏序。