下标
k 经过还原成了
f(k)=⌊23k+1⌋。假设
fi(k) 表示将
f 迭代
i 次带入
k。假设最终长度
N′=⌊3N2K⋅N⌋.
欲求
Ans(N,K)=0<i≤N′∑fK(i).
对
x 连续
K 次操作后,主项为
2K3Kx,误差项仅与
xmod2K 有关,因此假设
C:[0,2K)→Z,使得
fK(x)=2K3Kx+C(xmod2K).
因此按
2K 分组后形成
d=3K 的等差数列。
比如说,我们取
K=x+y,将
fK 分解为
fx∘fy。那么我们可以写
Ans(N,K)=2x3x(0<i≤N′∑f(i,y)−0≤i<2x∑i⋅cnt(i))+0≤i<2x∑fx(i)⋅cnt(i).
其中
cnt(i)
是
fy(k)mod2x=i 的个数。那么我们只考虑三件事,分别对应三项。
对于
A=0<i≤N′∑f(i,y)
一项,我们可以考虑写成
imod2y 一项和一个误差项。这当然可以
2y 扫一遍。
而考虑
ts=t0+s3y 这一式给出了
tsmod2x 是一个等差数列,故可以直接用差分遍历
2x 个循环计算
cnt。那么我们当然可以通过查表计算
Ans。时间复杂度是
O~(2K/2logN)(本文中
∼ 记号还表示忽略一个
poly(K) 的倍数)。
看起来不太能通过,但是我们还可以缝合上一个暴力,时间复杂度
O~(N⋅(2/3)K)。
那么平衡一下:
2K/2logN=N(32)K,即大致有
KlogN 约为
c=21log2−log32=21log29.
带入得时间复杂度
O~(Nα),α=log(9/2)log2≈0.461.
精细控制可以将复杂度内的
K 或
polylog(N) 相关控制在
polylog(K) 或
poly(loglogN) 量级。