差分和前缀和算法
首先声明,差分和前缀和都的下标都建议从1开始,本文中将采取这种方式。
前缀和
所谓前缀和算法,其实就是预处理从开头到某个下标为止的和,进而可以在O(1)的时间复杂度内快速求出[l,r]的和。
一维前缀和
1  | S[i] = a[1] + a[2] + ... a[i]  | 
二维前缀和
1  | S[i, j] = 第i行j列格子左上部分所有元素的和  | 
差分
所谓的差分其实是前缀和的逆操作
差分数组的前缀和就是原数组
差分的作用是将在[l,r]区间内所有数加c的操作转化为线性的对差分数组s[l]+c;s[r+1]-=c;的操作
与前缀和不同的是,不用专门去求差分数组,只需要将差分数组初始化为0,然后去l=r=i然后加a[i]的操作的就可以了。
一维差分
1  | 给区间[l, r]中的每个数加上c:B[l] += c, B[r + 1] -= c  | 
二维差分
1  | 给以(x1, y1)为左上角,(x2, y2)为右下角的子矩阵中的所有元素加上c:  | 
- 标题: 差分和前缀和算法
 - 作者: Tomfng
 - 创建于 : 2025-07-18 20:30:00
 - 更新于 : 2025-07-18 21:02:09
 - 链接: https://redefine.ohevan.com/2025/07/18/算法/差分和前缀和算法/
 - 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
 
        评论