数据结构笔记
树状数组
二维树状数组
二维树状数组中的一个位置 \(c_{x,y}\) 维护的是 \(\sum a_{x-lb(x)+1 \cdots x,y-lb(y)+1 \cdots y}\)
有一个玄妙的性质(其实和二维树状数组没多大关系):对于
\[
\forall i \in [x-lb(x),x-1),j \in [y-lb(y),y-1)
\]
我们设 \(t=((x-lb(x))\bigoplus (y-lb(y))) \& (up-(lb(x)-1))\),其中 \(lb(x)>lb(y),up=(11...1)_2\),有:
\[
i \bigoplus j \in [t,t+lb(x))
\]
且每个结果恰好出现 \(lb(y)\) 次。
树剖
树剖tricks
1、用数据结构维护重儿子,然后每次跳到链头的时候,暴力维护一下fa(最多log次)
2、假如想要修改周围一圈的点,可以选择用类似bfs的方式标记dfn,注意一下子树维护分类讨论(这样就不能维护链了)
注意点
1、downtag的常数可能很大!
2、考虑复杂度的时候,可以考虑叶子往上作贡献