c++的笔记
倍增法求lca(未编译,可能有失误)
int (x,y) { if(d[x]<(d[y]) swap(x,y); for(i=16;i>=1;i--) { if(d[f[x][i]]>=d[y]) x=f[x][i];//d[x]表示其深度;f[x][i]表示其向上2^i个点后的新点//该循环是为了将x移至与y同一深度
} if(x==y) return x; for(int i=16;i>=1;i--) { if(f[x][i]!=f[y][i]; x=f[x][i];y=f[y][i]; } return f[x][0];//上一个循环已经求出了只差一步就可以得到最近公共祖先的层数
*(1<<k)可以表示2^k
*k=(int)((log r-l+1)/(log 2));