数据结构笔记

树状数组

二维树状数组

二维树状数组中的一个位置 \(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、考虑复杂度的时候,可以考虑叶子往上作贡献

posted @ 2021-03-26 21:18  FakeDragon  阅读(42)  评论(0编辑  收藏  举报