树链剖分
fyc_kabuto
一个蒟蒻程序员
展开
-
3631: [JLOI2014]松鼠的新家
树剖裸题。每次将a[i-1]到a[i]的路径都加一,输出时除了a[1]其他都减一即可。PS:线段树小技巧如本题有访问所有叶子节点的值。只要把整棵树遍历一遍,访问到叶子是记录下就可以了,o(n)。(然而并没什么用)code:#include#include#include#includeusing namespace std;struct trnode{ int原创 2017-07-09 08:33:51 · 239 阅读 · 0 评论 -
bzoj 4999: This Problem Is Too Simple!
题意:给您一颗树,每个节点有个初始值。 现在支持以下两种操作: 1. C i x(0<=x<2^31) 表示将i节点的值改为x。 2. Q i j x(0<=x<2^31) 表示询问i节点到j节点的路径上有多少个值为x的节点。题解:看到这种东西,首先想到的就是树剖了吧。 但假如对于每一种值都看一棵线段树,空间爆炸。 但动态开点就没问题了。 关于值比较大,用map就行了。 code:#i原创 2017-09-01 20:47:34 · 414 阅读 · 0 评论 -
bzoj 3083: 遥远的国度
题意:维护一棵树,支持换根,路径修改,当前根下的子树最小值。题解:首先可以发现换根没什么太大的用处,无论换了几次,只有最后一次是对当前有影响的。所以记录下现在哪个做根,树的形态不用动。 第二种操作直接树剖。 关键是查询,因为换根,有点麻烦。 假设整棵树一开始的根是1,那么当x做根时,只对x到1的路径上的点的子树产生影响。 那么其他点就直接dfs序化成区间求最值。 当一个点y是x的祖宗,那么原创 2017-10-01 16:25:56 · 252 阅读 · 0 评论 -
bzoj 4538: [Hnoi2016]网络
线段树套堆原创 2017-10-16 16:36:34 · 258 阅读 · 0 评论 -
codeforces 1017G. The Tree
题意:给一颗一开始全是白点的树,支持三个操作: 1:将某一个点改成白点,假如已经是白点,则对儿子进行该操作。 2:将一颗子树改成白色 3:询问某个点的颜色题解:显然是在要操作的点上打上标记。 关键是要设计一种有用的标记,比赛时sb,没有想到可以用后缀和…… 一开始整棵树都是-1,对于一操作,就在该点上+1,那么一个点上是黑点当前仅当它到根的路径的最大后缀和&gt;=0。 2...原创 2018-08-09 14:57:25 · 519 阅读 · 0 评论