![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
树链剖分
qkoqhh
这个作者很懒,什么都没留下…
展开
-
bzoj 3611(链剖+前缀和)
来复习链剖吧。。以前一直认为链剖和线段树一定是标配。。其实以前学链剖的时候没有理解到位。。链剖可以说和dfs序是同一种手段,他们都是把树结构映射到数组上去的手段,因此链剖准确来说应该是一种算法而不是数据结构。 这题是有关树上路径维护的,所以当然用链剖,一开始想用线段树维护(思维形成定势了?qaq),后来发现这题没有在线询问,所以我们完全可以离线处理 ,这样的话直接维护前缀和即可。。 这题记得以原创 2018-01-06 20:17:33 · 192 阅读 · 0 评论 -
bzoj 1036(树链剖分+线段树)
继续练一下链剖吧。。这次写的蛮久的不过还是尽量避免了盲目使用gdb 看到单点修改其实蛮想用BIT的不过鉴于要求区间最大值BIT还是用不上啊,用log^2n的算法担心会超时。。所以这题应该算是比较标准的链剖了。。 #include #include #include #include #include #include #define inc(i,l,r) for(int i=l;i<=原创 2018-01-06 22:14:28 · 212 阅读 · 0 评论 -
bzoj4034(dfs序+BIT/链剖+线段树)
记得以前是用链剖+线段树做的,在链剖的时候顺便维护dfs序,思路简单实现起来就有点麻烦了。。 可参照:http://www.cnblogs.com/onlyRP/p/5041702.html 回顾这题发现其实主要是2操作针对子树而3操作针对链,而且唯一的询问操作3的链其实是到根的权值和,那么就想能不能直接dfs序进行操作呢?做一遍dfs序后我们可以用前缀和求出权值和,操作1修改点权值就原创 2018-01-07 10:38:18 · 253 阅读 · 0 评论 -
bzoj 2243
emmm没错又是链剖。。 转化成区间之后题目的奇怪询问看出这题是非线段树不可了,记录左右端点的颜色,然后对树链进行合并。。合并时有一个麻烦的问题就是这里的区间是有方向的,所以在合并时要写多几步来处理这个方向问题。。于是代码又长了一大截。。 #include #include #include #include #include #include #define inc(i,l,r)原创 2018-01-07 13:22:29 · 167 阅读 · 0 评论 -
bzoj 3626(神思维+链剖+线段树)
emmmm这道题的思路实在是神。。虽然做过然而做过一遍还是做不出来。。 本来还想到了另外一种思路。。。不过写完调来调去发现这个思路完全是错的qaq要是这样把队友坑了那怎么行qaq 继续贴清华爷gconeice的题解。。 显然,暴力求解的复杂度是无法承受的。 考虑这样的一种暴力,我们把 z 到根上的点全部打标记,对于 l 到 r 之间的点,向上搜索到第一个有标记的点求出它的深度统计答案。原创 2018-01-08 14:53:41 · 207 阅读 · 0 评论