1、lca预处理dfs中,1~20顺序枚举,而非倒序。
void dfs(int x,int fa){/** f,dep */ f[0][x]=fa;d[x]=d[fa]+1; for(int i=18;i>=0;--i)f[i][x]=f[i-1][f[i-1][x]]; qxs(){dfs(v,x);} }
void dfs(int x,int fa){/** f,dep */ f[0][x]=fa;d[x]=d[fa]+1; F(i,1,18)f[i][x]=f[i-1][f[i-1][x]]; qxs(){dfs(v,x);} }
2、线段树忘记下传懒标记
3、三目运算符优先级很低,?,:左右要加括号。下面代码中不加括号的话0和ask会连起来,作为上一个“:”后面的语句。
(l<=z?ask(x<<1,l,r):0)+(r>z?ask(x<<1|1,l,r):0);
4、判断了节点在子树内部,在字数外面,还要判断是他自己。
原文:https://www.cnblogs.com/seamtn/p/11586873.html