树状数组笔记

文章介绍了如何使用二维前缀和的方法解决区间和的问题,通过差分数组简化计算,将复杂的问题转化为基本的矩阵运算,提高了效率。该方法适用于处理大规模数据的求和问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

To be continue. 以后排版\texttt{To be continue. 以后排版}To be continue. 以后排版

前置:二维前缀和

(a,b),(c,d)(a,b),(c,d)(a,b),(c,d) 为顶点的二维区间和,即求下式。

∑i=ac∑j=bdai,j\sum_{i=a}^c \sum_{j=b}^d a_{i,j}i=acj=bdai,j

利用前缀和的思想,原式等于

∑i=1c∑j=1dai,j−∑i=1a−1∑j=1dai,j−∑i=1c∑j=1b−1ai,j+∑i=1a−1∑j=1b−1ai,j\sum_{i=1}^c \sum_{j=1}^d a_{i,j} - \sum_{i=1}^{a-1} \sum_{j=1}^d a_{i,j} - \sum_{i=1}^c \sum_{j=1}^{b-1} a_{i,j} + \sum_{i=1}^{a-1} \sum_{j=1}^{b-1} a_{i,j}i=1cj=1dai,ji=1a1j=1dai,ji=1cj=1b1ai,j+i=1a1j=1b1ai,j

我们发现,上式的每一项均为以 (1,1)(1,1)(1,1) 为起点的区间和,于是可以把每一项抽象为:

∑i=1n∑j=1mai,j\sum_{i=1}^n\sum_{j=1}^m a_{i,j}i=1nj=1mai,j

一维差分数组 ddd 有性质 di=ai−ai−1d_i=a_i-a_{i-1}di=aiai1

则设二维差分数组为 ddd,有
di,j=ai,j−(−ai−1,j−ai,j−1+ai−1,j−1)d_{i,j}=a_{i,j}-(-a_{i-1,j}-a_{i,j-1}+a_{i-1,j-1})di,j=ai,j(ai1,jai,j1+ai1,j1)
di,j=ai,j+ai−1,j+ai,j−1−ai−1,j−1d_{i,j}=a_{i,j}+a_{i-1,j}+a_{i,j-1}-a_{i-1,j-1}di,j=ai,j+ai1,j+ai,j1ai1,j1

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值