差分与前缀和

在处理区间问题时,差分与前缀和是一个非常有力的工具,一般而言,使用差分与前缀和要求维护信息有可减性,比如加法,而 \(max\) 等不能使用
对于不好维护的区间修改问题,可以转化成两端点差分值的单点修改
对于不好维护的区间查询问题,可以转化为两端点的前缀和的单点查询
总之,使用的宗旨是让维护信息更少,更容易使用

另外,在有些构造题中操作的本质很可能是前缀和或差分值的不改变,需要仔细观察


差分

对于序列上的差分,需要注意的是比如区间开根和异或等也都是可以维护的
另外,一个很好用的技巧是对等差数列的维护,相当于是对于差分数组的差分,维护两个前缀,如果辅以数据结构则是区间加与区间求和,比如 这题这题

P5607 [Ynoi2013] 无力回天 NOI2017
这个题就是一个很明显的用差分优化区间修改问题了


树上差分道理也是一样,处理静态序列操作,注意是差分点还是差分边,对于 \(lca\) 处是否 \(-1\) 进行判断


P3943 星空

由于操作的是区间,那么可以先对两个串进行差分,那么一次操作变成了两个单点修改
可以跑一个背包,\(dp\) 出修改相距 \(i\) 的两个点需要多少步
之后状压即可


关于构造

P4552 [Poetize6] IncDec Sequence

区间的加减操作转化为差分数组上的一个 \(+1\),另一个 \(-1\),发现这样让操作变得简单起来


游戏

比如这个题,发现操作的本质是前缀和的交换,那么看前缀和集合是否相等即可

posted @ 2022-08-07 19:27  y_cx  阅读(54)  评论(0编辑  收藏  举报