「营业日志 2021.1.26」多询问组合数前缀和

And if we don’t survive
I’d rather die than live a lie
——《Nexus》


F ( n , m ) = ∑ k = 0 m ( n k ) F(n,m) = \sum_{k=0}^{m} \binom n k F(n,m)=k=0m(kn)
询问 N N N F ( n , m ) F(n,m) F(n,m),满足 n , m ≤ N n,m\le N n,mN

本问题的寻常做法是基于 n , m n,m n,m 任何一维进行 ± 1 \pm 1 ±1 的操作只需要 O ( 1 ) O(1) O(1) 计算修改。那么根据莫队可以规划一条 O ( N 3 / 2 ) O(N^{3/2}) O(N3/2) 级别的路径。

能不能稍微给力一点啊?

我们考虑通过整式递推方法加速。

设向量 V n , m = [ F ( n , m ) ( n m ) ] = [ x y ] \mathbf V_{n,m} = \begin{bmatrix} F(n,m) & \binom n m \end{bmatrix} = \begin{bmatrix}x & y\end{bmatrix} Vn,m=[F(n,m)(mn)]=[xy],那么有横向转移
V n , m + 1 = [ x + n − m m + 1 y n − m m + 1 y ] = V n , m [ 1 0 n − m m + 1 n − m m + 1 ] \mathbf V_{n,m+1} = \begin{bmatrix} x+\frac{n-m}{m+1}y & \frac{n-m}{m+1}y \end{bmatrix} = \mathbf V_{n,m} \begin{bmatrix} 1 & 0\\ \frac{n-m}{m+1} & \frac{n-m}{m+1} \end{bmatrix} Vn,m+1=[x+m+1nmym+1nmy]=Vn,m[1m+1nm0m+1nm]
以及纵向转移
V n + 1 , m = [ 2 x − y n + 1 n − m + 1 y ] = V n , m [ 2 0 − 1 n + 1 n − m + 1 ] \mathbf V_{n+1,m} = \begin{bmatrix} 2x-y & \frac{n+1}{n-m+1} y \end{bmatrix} = \mathbf V_{n,m} \begin{bmatrix} 2 & 0\\ -1 & \frac{n+1}{n-m+1} \end{bmatrix} Vn+1,m=[2xynm+1n+1y]=Vn,m[210nm+1n+1]
设块大小 B ≤ N 1 / 2 B\le N^{1/2} BN1/2,那么我们可以先撒出所有 ( i B , j B ) (iB,jB) (iB,jB) 位置的 V \mathbf V V 值,此时对于每个 i i i,我们可以通过 FFT-倍增-拉格朗日插值在 Θ ( ( N / B ) log ⁡ N ) \Theta((N/B)\log N) Θ((N/B)logN) 的时间完成。因此这部分的总共代价是 Θ ( ( N / B ) 2 log ⁡ N ) \Theta((N/B)^2\log N) Θ((N/B)2logN)
对于单组询问,可以 Θ ( B 1 / 2 log ⁡ N ) \Theta(B^{1/2}\log N) Θ(B1/2logN) ( i , j ) = ( ⌊ n / B ⌋ , ⌊ m / B ⌋ ) (i,j) = (\lfloor n/B\rfloor,\lfloor m/B\rfloor) (i,j)=(n/B,m/B) 转移到其,因此总共复杂度为 Θ ( ( N / B ) 2 log ⁡ N + N B 1 / 2 log ⁡ N ) \Theta((N/B)^2\log N + NB^{1/2}\log N) Θ((N/B)2logN+NB1/2logN),当 B = Θ ( N 2 / 5 ) B=\Theta(N^{2/5}) B=Θ(N2/5) 时得到复杂度 Θ ( N 6 / 5 log ⁡ N ) \Theta(N^{6/5}\log N) Θ(N6/5logN)

能不能稍微再给力一点啊?

都做到这个份上了,你难道不觉得这个问题可以 polylog 吗?

设当前的 B = N 2 − k B=N2^{-k} B=N2k,对于每个 ( 2 i B , 2 j B ) (2iB,2jB) (2iB,2jB) 有可能有一维增加 B B B,总共有 N / 2 B N/2B N/2B 个位置要处理,可以 Θ ( B log ⁡ B ) \Theta(B\log B) Θ(BlogB) 算出乘积,然后 Θ ( ∑ N i log ⁡ 2 N i ) \Theta(\sum N_i\log^2 N_i) Θ(Nilog2Ni) 多点求值,一层的复杂度是 Θ ( N log ⁡ 2 N ) \Theta(N\log^2N) Θ(Nlog2N),总共有 log ⁡ 2 N \log_2N log2N 层,总共复杂度为 Θ ( N log ⁡ 3 N ) \Theta(N\log^3N) Θ(Nlog3N)

至于能不能把 log ⁡ \log log 的指数降下来一点,这件事先鸽着。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值