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\) ,再快速计算这一段的值。
posted @ 2022-04-11 22:58  qwq_123  阅读(57)  评论(1编辑  收藏  举报