分段打表

简介

万一哪一天真出了分段打表题呢

大概就是求一些没有什么特别好的性质的函数的前缀和,这个时候我们每隔 $S$ 打一个表

这样一次暴力询问我们就能做到 $O(S\times f)$,其中 $f$ 表示暴力求一个数的时间复杂度

例题

  1. 简要题意:定义 $magic(n)$ 等于将 $n$ 按十进制顺序写下来,依次对相邻两个数写下差的绝对值,得到的新数,例如 $magic(5913)=482$,对于一个大于等于 $10$ 的数字,我们不断进行 $magic$ 变换,最后一定可以得到一个小于 $10$ 的数字,如果一个数字 $n$ 可以通过不断进行 $magic$ 变换得到 $7$,那么我们称它为幸运数字,现在给定 $l,r$,求 $[l,r]$ 范围内有多少幸运数字

    $1\le l\le r\le 10^9$

    简要题解:我们考虑判断一个数字是否是幸运数字大概需要 $O(\log_{10}^2n)$ 的时间,大概 $1s$ 只能做 $10^6$ 次判断

    所以我们考虑分段打表,令块大小为 $10^6$,这样本地打表大概需要 $10min$,且表的大小只有不超过 $10k$

    Luogu P1822 魔法指纹