思考
对比前缀和、差分和树状数组
算法 | 目的 | 单次操作复杂度 |
---|---|---|
前缀和 | 快速求子段和 | 区间求和 O ( 1 ) O(1) O(1) \; 区间修改 O ( n ) O(n) O(n) |
差分 | 快速子段修改 | 区间修改 O ( 1 ) O(1) O(1) \; 单点查询 O ( n ) O(n) O(n) |
树状数组 | 均衡上述目的,同时是动态版前缀和 | 单点修改 O ( l o g n ) O(logn) O(logn) \; 区间求和 O ( l o g n ) O(logn) O(logn) |
差分+树状数组 | 均衡差分 | 区间修改 O ( l o g n ) O(logn) O(logn) \; 单点查询 O ( l o g n ) O(logn) O(logn) |
区间修改指的是区间加减
能够区间求和就自然可以单点查询
差分+树状数组的思路:树状数组维护差分序列,通过树状数组的单点修改操作进行差分的区间修改,通过树状数组的区间求和优化差分的单点查询
总结树状数组
求区间和要想到 (1)
单点修改要想到 (3)