码迷,mamicode.com
首页 > 其他好文 > 详细

简单差分(这个其实真的容易理解)

时间:2018-04-06 17:32:47      阅读:113      评论:0      收藏:0      [点我收藏+]

标签:color   避免   div   不可   分数   就是   pos   blog   一个   

首先,给出一个问题:

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

1.如果暴力,卡一下le和ri,随随便便让你T成狗.

2.用线段树或树状数组搞一搞,抱歉,这个复杂度是O(Qlogn)的,还是会T(虽然他们解决别的题目很NB)

3.差分,没错,要入正题了,很高兴O(n)+常数

还是用上面这个题目,假如要在le和ri上全都加一个x,很显然,这个O(n)是不可避免的,既然这样,那我们考虑把O(n*Q)变成O(n+Q).也就是说,在询问中我们不去for来加x,而是做一个标记,最后一起加上

! 现在需要自己动笔模拟一下了 !

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

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

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

4.再用O(n)的for把他们加到原序列之中去,输出!

看一下复杂度,果然:O(常数*n).

这个代码应该不难,所以我也就不贴了(其实这算一种思想,没有完全的板子)

简单差分(这个其实真的容易理解)

标签:color   避免   div   不可   分数   就是   pos   blog   一个   

原文地址:https://www.cnblogs.com/cjoierljl/p/8728110.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!