板子里面容易写挂的地方

普遍性错误

  1. 不加编译命令的vsc,int函数不带返回值是不会报错的,太坑。
  2. 双向边一定要开两倍空间。

线段树

  1. 查询和修改都要 \(pushdown\)
  2. \(build\) 里面要给 \(l\) 和 $ r$ 赋初值 (+2)。
  3. 查询的时候复制粘贴修改的代码时,记得还要加上 \(query\)
  4. 部分线段树板子里面要注意叶子结点的 pushup 特判(奇偶覆盖扫描线)。

01Trie

  1. 不知道为什么,但是初始深度最好开大一点。举个例子,如果说 \(V=10^9\) 对应二进制下有 \(30\) 位,那么最好开 \(33\) 以上。

倍增LCA

  1. \(Fa[x][20]\) \(20\) 一定要写大一点,比如 \(30\) ,否则枚举小一点,不然越界很麻烦
  2. 根节点一定要 \(dep=1\) ,否则就会与 \(0\) 号节点同深度,出现问题(实际上树上倍增问题很大一部分都会因为根节点信息没处理好,导致在询问中有根节点的时候出错)
  3. 交换 倍增维度 和 节点维度 可以得到巨量的常数优化。

树链剖分

  1. 这个里面 \(dep\) 的初值是不是 \(1\) 无所谓,但是每个点 \(siz\) 一定要赋初值为 \(1\) ,因为查询和确定重儿子的时候均会涉及到。
  2. 路径查询的时候比较的是重链顶端节点的深度,而不是当前节点的深度。
  3. 树剖 LCA 的常数很小。

GCD

  1. 写成

    return y==0?x:gcd(y,x%y);//而不是return x%y==0?x:gcd(y,x%y);
    

Trie

  1. \(0\) 号节点也需要清空。

分块

  1. 在拆分询问区间 \([l,r]\) 的时候,记得要特判一下 \(l\)\(r\) 所在块相同的情况。
posted @ 2024-08-31 13:31  Hanggoash  阅读(28)  评论(0)    收藏  举报
动态线条
动态线条end