一维差分保姆级入门教程(第一章)

之前我们简单的讲了一下二维数组(没看过的可以去看看呀~)

今天我们就来讲一下C++中的一维差分~(有错可评论)

一维差分,顾名思义,就是一维数组中的差分操作(这不是废话吗)

开始前我想先向大家说明一个非常非常主要且有用的知识点!!

那就是: 差分 和 前缀和 互为逆运算!

那么构造差分数组其实也挺简单的,用第i个元素减去第i-1个元素存入b[i]即可

1.差分就是前缀和的逆运算(a[i]=b[1]+b[2]+…b[i])
2.差分的作用就是快速实现将数组部分加上一个数
例如:
如果对b[l]加c则表示l后面的值都会加上x(因为计算原数组都会加上c)
如果对b[r+1]减x则r+1后面的值都会减x
那么前两步合起来,则可以表示将[l, r]区间加x
如何构造差分数组?
可以利用区间[l, r]+c的方法,例如构建b[i] ,我们可以插入[i, i]+c的方法
常见的一维差分操作是令某一段区间的数同时加上一个数,我们利用定义出发很容易就能想到只要在区间起点位置加上一个数就行了,但是这样的话我们构成的新数组就是从起点开始以后的数都加上一个数,因为我们想要的只是一段区间,所以只需要在终点的下一个位置减去这个数即可。

1.	b[l] += c;
2.	b[r + 1] -= c;

其实在我们构造一维差分数组是有一个更便捷的方法,就是将一段区间加上一个数这一操作特殊化。

我们将差分数组初始化为0,这时原数组也是0,可以看成b数组是a数组的差分数组,而a数组则是b数组的前缀和数组。那么我们需要对a数组输入数据,就可以看成是对 [i , i] 这个区间加上一个数,那么进行n次操作后我们就可以构造出一个新的差分数组了,因为后续我们需要对一段区间操作,所以利用这一性质我们可以直接合并这一操作,使其利用率更大233333333

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值