关于差分

本文详细介绍了差分的概念及其在一维和二维数组中的应用。通过实例解释了一维差分的基本原理,包括如何构建差分数组以及如何利用差分数组进行区间更新操作。此外,还探讨了如何将这一概念推广到二维场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

所谓差分就是就是去维护一个数列的差值数组
打个比方就是
原数列位:
1,2,3,4,5,6,7
那么我们要维护的差分数列就是
1,1,1,1,1,1,
就是对于第i个数
那么差分数列的第i+1位就是data[i]-data[i-1]
这个东西有什么用呢?

void getarr()
{
    for(int i=1;i<=n;i++)
    {
        data[i]=data[i-1]+div[i];//div为差分数组
    }
}

我们可以按照这样的方式把数组还原回去;
这样就支持一些奇怪的操作了

如果我们要更改一个区间的值就比如说区间l,r吧
如果我们更改了差分数组的第i位,那么我们还原的时候,就会影响到i位及以后的元素,这样的话
我们如果要在l,r上加一,那么我们就这样

div[l]+=1;div[r+1]+=-1;

对于这样的区间操作。
我们就可以O(1)修改
并且最后O(n)查询
如果是边修改变查询就要弃疗了,安心线段树吧

以上就是一维的差分
那么我们怎么去做到二维呢?
这里写图片描述
就这样。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值