BZOJ-1036-树的统计Count
描述
一棵树上有n个节点,编号分别为1到n,每个节点都有一个权值w。我们将以下面的形式来要求你对这棵树完成一些操作: I. CHANGE u t : 把结点u的权值改为t II. QMAX u v: 询问从点u到点v的路径上的节点的最大权值 III. QSUM u v: 询问从点u到点v的路径上的节点的权值和. 注意:从点u到点v的路径上的节点包括u和v本身.
分析
学了树链剖分就能做的题目.
- 一个查询和操作和一个查询最大值操作, 中间的步骤不一样. 可以写两个函数, 返回值初始化的时候不一样, QSUM的时候初始化为0, QMAX的时候初始化的时候初始化为 -INF.
- 想不通过树链剖分直接调用线段树 (比如本题的修改操作, 因为是单点修改), 修改的不是
x
而是tid[x]
也就是x的新编号. 因为线段树里的编号是重新编的.
代码
https://code.csdn.net/snippets/607983
INF 可以设为
0x3f3f3f3f
, 这样memset(0x3f)
后数组初始值都等于0x3f3f3f3f
. 比较好的性质. ——Archon一堆宏, 写熟了很好用. ——Archon