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=a∑cj=b∑dai,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=1∑cj=1∑dai,j−i=1∑a−1j=1∑dai,j−i=1∑cj=1∑b−1ai,j+i=1∑a−1j=1∑b−1ai,j
我们发现,上式的每一项均为以 (1,1)(1,1)(1,1) 为起点的区间和,于是可以把每一项抽象为:
∑i=1n∑j=1mai,j\sum_{i=1}^n\sum_{j=1}^m a_{i,j}i=1∑nj=1∑mai,j
一维差分数组 ddd 有性质 di=ai−ai−1d_i=a_i-a_{i-1}di=ai−ai−1
则设二维差分数组为 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−(−ai−1,j−ai,j−1+ai−1,j−1)
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+ai−1,j+ai,j−1−ai−1,j−1