这是本文档旧的修订版!
给定一个 $n\times m$ 的 $01$ 矩形,求满足下列条件的子矩阵数目:
考虑 $O(n^2)$ 枚举所有的矩阵上下边界,然后 $O(n)$ 扫描所有的列。
对与约束条件一,不妨依次处理上下边界均为连续 $1$ 的区间,然后只考虑在该区间中全是 $1$ 的列的贡献。
对约束条件二,不妨将 $0$ 设为 $-1$,于是约束变为子矩阵内部的数值和绝对值不超过 $1$。
考虑桶维护区间内所有合法列的内部数值和,总时间复杂度 $O(n^3)$。
给定 $n$ 个区间,每个区间都有 $\frac 12$ 的概率被选中,问所有选中区间的交区间长度的平方的期望值。
设离散化后 $\text{X}$ 轴被分割为 $[x_1,x_2\cdots x_{m+1}]$,记 $[x_i,x_{i+1}]$ 的长度为 $y_i$
易知某个选择方案的贡献为 $\cfrac {(y_l+y_{l+1}+\cdots +y_r)(y_l+y_{l+1}+\cdots +y_r)}{2^n}$。
上式可以化为 $y_l\cfrac {y_l+y_{l+1}+\cdots +y_r}{2^n}+y_{l+1}\cfrac {y_l+y_{l+1}+\cdots +y_r}{2^n}+\cdots +y_r\cfrac {y_l+y_{l+1}+\cdots +y_r}{2^n}$
于是对每个交区间包含 $[x_i,x_{i+1}]$ 的方案,$[x_i,x_{i+1}]$ 的贡献为该方案的交区间总长度乘以 $y_i$ 除以方案数。
于是 $[x_i,x_{i+1}]$ 的总贡献为所有包含 $[x_i,x_{i+1}]$ 的方案的交区间长度的期望值乘以 $y_i$,考虑扫描过程中维护所有包含 $[x_i,x_{i+1}]$ 的线段。
设某个区间 $[x_j,x_{j+1}]$,假设它被 $d$ 条线段覆盖,则它对交区间长度的期望值的贡献为 $\cfrac {2^d-1}{2^n}$。
考虑先对每个区间贡献乘以 $2^n$ 然后加一,于是只需要建立一棵支持区间乘法的线段树即可维护交区间的期望长度。
最后处理先前操作的影响即可,时间复杂度 $O(n\log n)$。