差分(思想)

差分(思想)

给出n个数,再给出Q个询问,每个询问给出l,r,x,要求你在l到r上每一个值都加上x,而只给你O(n)的时间范围,怎么办?

思考一下:
1、如果暴力,卡一下l和r,随随便便让你O(n^2)T成狗。
2、用线段树或树状数组搞一搞,抱歉,这个复杂度是O(Qlogn)的,还是会T(虽然他们解决别的题目很NB)
3、差分,没错,就是标题,很高兴O(n)+常数…

那么用差分如何解决?
------在询问中我们不去for来加x,而是做一个标记,最后一起加上

实现:
先另外开一个专门差分的数组(大小=题中的序列长度)

eg:
原数列:1,2,3,4,5,6,7
第一次操作:(l,r,x)=(2,4,7)
我们在差分数组中的2位置上加上一个7,再在4+1的位置上减去7;

第二次操作:(l,r,x)=(1,3,4)
我们在差分数组中的1位置上加上一个4,再在3+1的位置上减去4;

差分数组为:4 7 0 -4 -7 0 0

真实操作为:cf[i]=cf[i-1]+cf[i]
(cf:差分)

修改后的差分数组为:4 11 11 7 0 0 0

再将此差分数组作用于原数组即可

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值