ARC135E
题面
给定 \(n,x\) ,你需要构造出长度为 \(n\) 的序列 \(A\),使其满足:
- \(a_i=x\) 。
- \(\forall\ i\in[1,n],i|a_i\) 。
- \(\forall\ i\in[1,n-1],a_i<a_{i+1}\) 。
你需要最小化 \(\sum a_i\) ,求出这个最小值。
数据范围 \(n,x\le 10^{18},T\le 10\) 。
题解
也是很有启发的题。
可以设 \(p_i\) 表示在 \(a_i\) 最小的情况下 \(p_i=\frac{a_i}{i}\) 。
首先说明一点: \(p_i\) 会单调不增。
根据 \(a_i>a_{i-1}\) 推出 \(p_i=p_{i-1}-\frac{p_{i-1}-1}i{}\) ,继而发现 \(\forall\ i,p_i-p_{i-1}\ge p_{i+1}-p_i\) 。
进一步可能会发现,当 \(i\) 较大时 ,后面一大段 \(p_i-p_{i-1}\) 都是为 \(0\) 的。
进一步猜想:我们可以按 \(d_i=p_{i+1}-p_{i}\) 的取值给序列分段(类似整除分块。)
这看起来很玄学,但是实际上是有证明的(我只能说我自己也没有研究证明。)
然后我们就可以(用类似)整除分块(的结构)了。
就是设当前拥有同样 \(d_i\) 的左端点为 \(l\) ,考虑求出右端点,根据 \(d_r>d_l\) 设出方程:
\[\begin{aligned}
\frac{p_{r}-1}{r+1}&>d_l\\
p_{l}+d_l(r-l)-1 & >d_l(r+1)\\
r&<\frac{p_l+d_l(l-1)-1}{2d_l}
\end{aligned}
\]
解出 \(r\) 之后也可以通过 \(O(1)\) 快速求这一段的贡献,因为不是重点便不再赘述。
结合上面的证明,这样就在 \(O(Tx^{\frac{1}{3}})\) 的复杂度内解决了。
启发
- 看到除 \(i\) 的递推就要猜想会有连续段的出现。
- 有连续段的序列快速计算和就用上面的方法,用 \(l\) 解出 \(r\) ,再快速计算这一段的值。