【NOTE】Part 4


子集\(\text{DP}\)

如 求解 \(f[S]=\sum\limits_{T\subseteq S}w[T]\)

枚举所有子集复杂度高达 \(2^{bitsum(S)}\)

\(g[S][i]\) 表示集合 \(S\)\(i\) 位变换得到子集的价值和。

则:

\[g[S][i]= \begin{cases} g[S][i-1] & bit(S,i)=0\\ g[S][i-1]+g[S\ \oplus\ 2^i ][i-1] & bit(S,i)=1 \end{cases} \]

显然也可以把后面那维压掉。也即:

\[g[S]+=g[S\ \oplus\ 2^i] \]


树状数组/线段树维护 \(n\) 阶前缀和

区间查询相当于单点查询加一阶。这里考虑单点查询。默认操作为区间加。

零阶

树状数组

差分后单点加

线段树

乱杀,略

一阶

树状数组

差分得负一阶数组 \(E\)

则零阶 \(B_i=\sum\limits_{j=1}^i E_j\),一阶 \(A_i=\sum\limits_{j=1}^i B_j\),则

\[\begin{aligned} A_i &=\sum\limits_{j=1}^i B_j\\ &=\sum\limits_{j=1}^i\sum\limits_{k=1}^j E_k\\ &=\sum\limits_{k=1}^i\sum\limits_{j=k}^{i}E_k\\ &=\sum\limits_{k=1}^i(i-k+1)E_k\\ &=(i+1)\sum\limits_{k=1}^iE_k-\sum\limits_{k=1}^ik \times E_k \end{aligned} \]

开两个树状数组,分别维护 \(E_k\)\(k \times E_k\) 就可以了。

线段树

乱杀,略

二阶

树状数组

做法跟上面差不多。分别用 \(C,B,A\) 表示零阶,一阶,二阶。

\[\begin{aligned} A_x&=\sum\limits_{i=1}^x\sum\limits_{j=1}^i\sum\limits_{k=1}^jE_k\\ &=\sum\limits_{k=1}^x\sum\limits_{j=k}^{x}\sum\limits_{i=j}^{x}E_k\\ &=\sum\limits_{k=1}^x\frac{(x-k+2)(x-k+1)}{2}E_k\\ &=\frac{(x+2)(x+1)}{2}\sum\limits_{k=1}^{x}E_k-\frac{2x+3}{2}\sum\limits_{k=1}^{x}k \times E_k+\frac{1}{2}\sum\limits_{k=1}^{x}k^2 \times E_k \end{aligned} \]

分别维护 \(E_k\)\(k \times E_k\)\(k^2 \times E_k\) 就可以了。

线段树

转化为区间加等差数列。

给线段树的每个结点打 \(lazytag\),保存等差数列首项以及公差。

这个 \(tag\) 很显然很容易叠加(等差数列之和也是等差数列)

多阶

树状数组

理论上 \(n\) 阶前缀和可以使用 \(n\) 个树状数组用类似上面的方法来维护。

树状数组比线段树多一阶,区间修改比单点修改多一阶,区间查询比单点查询多一阶()就这样()


标记永久化

好像就是信息直接打在对应区间节点上而不下传而已。

一个节点的信息转化为到根的链上所有信息合并。

主席树可以通过这玩意实现区间加。相当于只修改 \(log\) 个线段树结点。


兔队线段树

楼房重建,好像是这个题吧

求严格前缀最大值的数量,带修

线段树区间合并的信息通过往线段树下爬一条 log 的链得出,很喵喵。


曼哈顿距离与切比雪夫距离的转化

曼哈顿距离(四连通距离):\(|x-x_1|+|y-y_1|\)

切比雪夫距离(八连通距离):\(\max(|x-x_1|,|y-y1|)\)

曼哈顿距离 \((x,y)\) \(\longrightarrow\) 切比雪夫距离 \((x+y,x-y)\)

曼哈顿距离转为切比雪夫距离,把菱形转化到正方形。

例如转化为求到某个点切比雪夫距离 \(\leq x\) 的点的个数,就可以变成求矩形内的点数。(矩形内点数可以二维前缀和或者主席树,求第 \(k\) 大 可以二分距离判断距离内点个数..)

切比雪夫距离 \((x,y)\) \(\longrightarrow\) 曼哈顿距离 \((\frac{x+y}{2},\frac{x-y}{2})\)

切比雪夫距离转为曼哈顿距离,可以分两个坐标来讨论(?)或者是转化为二维数点?

比如给定平面上一些点,快速求出一系列点到其中某个点的切比雪夫距离,就可以先转化为曼哈顿距离然后按照两维坐标排序求前缀和。(由于曼哈顿是求和两维答案互不影响)


范德蒙恒等式

\[\sum\limits_{i=0}^{k}{n \choose i}{m \choose k-i}={n+m \choose k} \]

组合意义:在一个大小为 \(n+m\) 的集合中取出 \(k\) 个数,可以等于把大小为 \(n+m\) 的集合拆成两个集合,大小分别为 \(n\)\(m\),然后从 \(n\) 中取出 \(i\) 个数,从 \(m\) 中取出 \(k-i\) 个数的方案数。

posted @ 2022-10-10 15:02  Akuto_urusu  阅读(50)  评论(0)    收藏  举报