[关闭]
@Junlier 2018-10-12T14:39:35.000000Z 字数 646 阅读 6003

简单差分

数学方法——差分

引入

首先,给出一个问题:
给出个数,再给出个询问,每个询问给出要求你在上每一个值都加上,而只给你的时间范围,怎么办?
思考一下:

1.如果暴力,卡一下,随随便便让你
2.用线段树或树状数组搞一搞,抱歉,这个复杂度是的,还是会(虽然他们解决别的题目很NB)
3.差分,没错,就是标题,很高兴常数

方法

还是用上面这个题目,假如要在le和ri上全都加一个x,很显然,这个O(n)是不可避免的,既然这样,那我们考虑把变成.也就是说,在询问中我们不去来加,而是做一个标记,最后一起加上。嗯,这里暂时记住就好......
现在需要自己动笔模拟一下了!

实现

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

2.假如在~的区间上加上,那我们在差分数组中的位置上加上一个(原因暂时不懂没关系,用笔先跟着模拟),再在的位置上减一个,如此操作完Q次。

3.假如我们只有这一次操作,开始统计答案,运用前置和的思想,(差分).
那么你会发现(如果你模拟了的话),在~的区间上,你已经使差分数组全部加上了(推广到所有一起统计答案依旧正确)

4.再用把他们加到原序列之中去,输出!

看一下复杂度,果然:常数.
这个代码应该不难,所以我也就不贴了(其实这算一种思想,没有完全的板子)

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注