./remake 算法 - 前缀和&&差分

文章讲述了差分和前缀和的概念,以及它们在处理数组区间操作时的相互转换关系。差分操作可以通过修改前缀和数组的特定值来实现,而前缀和数组又可以通过差分数组求得。这种转换在处理数组问题时能简化计算,例如,对数组区间加减操作可以简化为对差分数组的修改。
摘要由CSDN通过智能技术生成

差分与前缀和是一组相反的操作。

差分一般比较适合用在区间操作(对一个区间进行整体的加减)。

差分操作如何表示?

修改前缀和数组的某个连续区间范围内的值,可以转化为只需要修改其差分数组的某两个值。

比如说:对区间[l, r]操作,表示为C[l] += c,且 C[r+1] -=c

定义

给定一个数组 A ,其前缀和数组B表示A[i]及其之前所有数的和。

给定一个数组 A ,其差分数组C则表示数组C的前缀和为A[i]。

A数组可以看作是普通的数组,也可以看作是前缀和数组。

将一个数组看作普通数组,对其求前缀和,如下:

image-20230312130514723

将一个数组看作前缀和数组,根据差分数组求前缀和,如下(这个差分数组的意思:[0, 2] + 1, [1,3] + 2):

image-20230312130718640

因此有:

差分数组 => 前缀和 => 前缀和数组, 前缀和数组 => 求差分 => 差分数组

例子

给定一个数组 A ,其差分数组为 B。

如果对A数组的某个区间 [l, r]上每个数都加一个数c, 其等价于 B 数组中 B[l] += c,且 B[r+1] -=c。

因为A[l]表示B[l]的前缀和,则如果B[l]多加一个c(B[l] += c),则A[l], A[l+1], …, A[r], A[r+1], …, A[n] 都将多加一个c。

我们只需要 [l, r] 上加c,所以对于 A 在 [r+1, n]区间上的值再减去 c,即对应于 B[r+1] -= c。

最终所有m个操作后,得到的是对差分数组B的操作,分别求其各个位置的前缀和即得到A数组

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值