树状数组和线段树分享
树状数组基本操作:
ask(p, l, r); // 求前缀和
change(p, l, v); // 改某值或加,单点增加, 可维护另一个来实现区间增加
线段树基本操作
build(p, l, r);
change(p, l, r, d); // 区间增加
ask(p, l, r); // 区间求和
有延迟标记的加spread(p)函数下传标记,只在change和ask操作中需要考虑延迟标记,build不需要考虑和普通线段树一样
* 区间增加
ST算法:
由大范围到小范围
扫描线
*
树的直径两种解法,一种是树形dp,逐次更新树的直径和以某节点为根的最长路来求得,一种是通过两次bfs或dfs进行计算树的直径,这种做法更统一计算出直径上的具体节点,在第二步遍历的过程中,可以记录下来每个点第一次被访问的前驱节点。
有趣的题记录
acwing 272