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=0∑m(kn)
询问
N
N
N 次
F
(
n
,
m
)
F(n,m)
F(n,m),满足
n
,
m
≤
N
n,m\le N
n,m≤N。
本问题的寻常做法是基于 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+1n−mym+1n−my]=Vn,m[1m+1n−m0m+1n−m]
以及纵向转移
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=[2x−yn−m+1n+1y]=Vn,m[2−10n−m+1n+1]
设块大小
B
≤
N
1
/
2
B\le N^{1/2}
B≤N1/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=N2−k,对于每个 ( 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 的指数降下来一点,这件事先鸽着。