@Junlier
2018-10-12T14:39:35.000000Z
字数 646
阅读 6022
数学方法——差分
首先,给出一个问题:
给出个数,再给出个询问,每个询问给出要求你在到上每一个值都加上,而只给你的时间范围,怎么办?
思考一下:
1.如果暴力,卡一下和,随随便便让你 。
2.用线段树或树状数组搞一搞,抱歉,这个复杂度是的,还是会(虽然他们解决别的题目很NB)
3.差分,没错,就是标题,很高兴常数
还是用上面这个题目,假如要在le和ri上全都加一个x,很显然,这个O(n)是不可避免的,既然这样,那我们考虑把变成.也就是说,在询问中我们不去来加,而是做一个标记,最后一起加上。嗯,这里暂时记住就好......
现在需要自己动笔模拟一下了!
1.先另外开一个专门差分的数组(大小=题中的序列长度)
2.假如在~的区间上加上,那我们在差分数组中的位置上加上一个(原因暂时不懂没关系,用笔先跟着模拟),再在的位置上减一个,如此操作完Q次。
3.假如我们只有这一次操作,开始统计答案,运用前置和的思想,(差分).
那么你会发现(如果你模拟了的话),在~的区间上,你已经使差分数组全部加上了(推广到所有一起统计答案依旧正确)4.再用的把他们加到原序列之中去,输出!
看一下复杂度,果然:常数.
这个代码应该不难,所以我也就不贴了(其实这算一种思想,没有完全的板子)