今天学了前缀和和差分,为了避免我把它忘掉,我还是浅浅的记录一下吧
首先需要知道什么是前缀和与差分:
前缀和就是数组中某元素之前(包括此元素)的所有元素的和
设b[]为前缀和数组,a[]是原数组。
对于一维数组而言,某个元素的前缀和就是从这个数组的第0个元素到这个元素的所有元素之和。
即:
那么就可以对区间求和产生更深刻的理解:
对于求出一个区间[l,r]的所有元素之和,我们就可以将首元素的前缀和与末元素的前缀合相减。
代码如下:
而对于二维数组来说,每个元素的前缀和b[x][y]就是从a[0][0]到a[x][y]之间所有元素的和
比如b[3][1],就可以如下图的方法表示:
而如果我想给一个区间求和,就直接表示为: