
差分
seeeagull
这个作者很懒,什么都没留下…
展开
-
[cf1406D]Three Sequences(线段树+差分)
给一个序列a,要得到两个数列b和c,使bi+ci=ai,且b序列递增,c序列递减,要使b和c中最大元素最小。同时会有q次修改,每次将a序列在(l,r)区间内的元素都加上x。首先由于b和c的性质,所以使b和c中最大元素最小,即是使max(bn,c1)最小。然后我们假设c1已确定,这样b1就也被确定,考虑能否确定b2和c2。由于要使bn最小,所以尽量使每个bi - bi-1尽量小,由于ai和ai-1已经固定,所以(bi - bi-1)+(ci - ci-1)已固定,等同于使ci-1 - ci尽量小。那么每次原创 2020-10-03 15:19:33 · 184 阅读 · 0 评论 -
[P1600][NOIP2016]天天爱跑步(lca+桶+差分)
填一下退役前(被我遗忘)的坑……读完题后首先想到的模拟过程,大概就是对于每个玩家的路径,一个点一个点地验证能否被观测到,把贡献加给该点。要想写部分分的话,看到有一些数据s=1,也就是从根节点出发,那么只要路径上的点的深度(假设根节点深度为0)等于w值即可,于是可以给我们一个思路,一条路径上的点i能否被观测到,可由dep[i]和w[i]与这条路径的关系确定。那么关系式长什么样呢?显然应该分成两部分考虑,由s到lca和由lca到t。稍微画几个图推一推可以发现,前半段观测条件为dep[i]+w[i]=原创 2020-08-29 11:09:15 · 234 阅读 · 0 评论 -
[P4211][LNOI2014]LCA(树链剖分+差分)
一个节点的深度,就是这个节点到根的路径上的节点数,所以所求可转化为 l 到 r 区间内每个节点到根与 z 到根的公共路径上点数之和。修改和查询的路径一定是某节点到根,用树链剖分来维护。但每次都从 l 到 r 添加贡献再还原肯定不可行。我们能发现不同询问区间可能有重叠,似乎可以离线做;维护的又是公共点数的和,是可减的,能用差分求出。所以最终只要按顺序把节点 i 到根的值都+1,然后遇到询问就查询...原创 2019-05-20 15:56:55 · 233 阅读 · 0 评论 -
[P4175][CTSC2008]网络管理(LCA+树状数组+主席树)
求树上链的带修第k大,跟我上一篇的区间带修第k大其实思路差不多。区别见下。只要先dfs一遍记录dfs序,就可以看成一个序列了。每个节点对应的线段树要维护从它到根的不同权值个数,所以每个节点会对以它为根的子树产生影响,所以树状数组修改时是区间修改而不再是单点修改。u到v的路径=u+v-lca(u,v)-lca(u,v)的父亲,所以查询时是四个位置一起跳。其他就没什么特别的了。#includ...原创 2019-05-22 10:03:02 · 152 阅读 · 0 评论 -
[P2664]树上游戏(树上差分)
考虑对于每种颜色,如果把该颜色的节点全部删去的话,会形成很多小的树。对于一个仍然保留的节点,除了与它在同一颗小树上的点,其余点都会对它产生1的该颜色的贡献。那么一个节点的sum就是总颜色数*总节点数-Σ删掉每种颜色后该节点所属的树的大小。于是考虑如何求新的树的大小,可以使用差分。对于一个颜色为c的节点u,它的儿子v的sum,便加上以v为根,最大的不含c颜色的树的大小。当在从v向它子树的某条路径...原创 2019-07-07 15:55:19 · 298 阅读 · 0 评论