题解 CF407C Curious Array

这个题我觉得还挺有趣的。

推式子发现走不通,如果分开考虑,我甚至对于每个数最后计算都很困难。只能考虑组合数间的递推关系。因为 $\binom{n}{m}=\binom{n}{m-1}+\binom{n-1}{m-1}$,这个题的 $n$ 又是连续递增的,考虑差分试试。

发现每次加的就是 $\binom{k}{k},\binom{k+1}{k},\cdots\binom{k+r-l}{k}$,令 $\Delta^{(1)}_i=\binom{k+i}{k}-\binom{k+i-1}{k}$,发现 $\Delta^{(1)}_i=\Delta^{(1)}_{i-1}+\binom{k+i-1}{k-1}$,令 $\Delta^{(2)}_i=\Delta^{(1)}_i-\Delta^{(1)}_{i-1}$,现在变成了在 $\Delta^{(2)}$ 上区间加 $\binom{k+i-1}{k-1}$ 了,我们通过一次差分,使问题的 $k$ 减小了 $1$。依此类推 $\Delta^{(3)},\Delta^{(4)},\cdots,\Delta^{(k)}$。

因为 $k\le 100$,所以最多 $100$ 次可以使 $k$ 变为 $0$,这时就变成区间 $+1$ 了,再差分一次就结束。

每次要在差分序列上 $r+1$ 位减去 $[l,r]$ 所有新加的值之和,保证差分的正确性,而这个区间和恰是上一个差分序列第 $r$ 位的值,即一个确定的组合数,预处理即可。

时空复杂度 $O(nk+mk)$。

posted @ 2023-06-01 13:34  Terac  阅读(18)  评论(0)    收藏  举报  来源