前言
虽说,成大事者不拘小节,但是,细节决定成败!
数据结构
1. 树链剖分预处理的dfs1和dfs2函数内部递归不要写成dfs
2. 线段树加法标记在计算的时候要乘上区间长度:sum(son)=add(p)*(r(son)-l(son)+1)
3. 树链剖分常规操作函数里面线段树节点从1开始,而不是题给的root
4. 线段树空间开四倍
5. 无向图空间开两倍
6. 不要忘记init()初始化(尤其是前向星的h数组!)
7. 初始化中有n的需要先读入再初始化!
8. 树链剖分dfs1中每次循环末尾不要忘记size[p]+=size[to]
9. 主席树query函数中递归时与k比较大小的并不是mid
10. unique函数返回的是去重后末尾元素的下一个位置,求元素个数时若下标从1开始则通常减去(数组名+1)
11. lower_bound返回第一个大于等于x的位置,减去数组名即可
12. upper_bound返回第一个大于x的位置,减去数组名即可
13. 常规线段树区间查询和区间修改操作中递归时将[l, r]整个区间递归,而非分成左右两个子区间