数位和问题题解

题目:


image
image
image

大体思路:

我们实际上可以暴力更新答案,注意到如果一个位置上的数 \leq 9 那么更新实际上没用,于是维护一个 \geq 10 的数的列表,每次只更新区间内列表的数即可。
因为 a[i] \leq 10^9 ,假设 f(x)x 的数位和,则 f(a[i]) \leq 81f(f(a[i])) \leq 18f(f(f(a[i])))\leq9 ,也就是每个位置最多被更新 3 次,常数级别。

维护列表可以用 set 来维护,set里存储所有$\geq10$ 的数的下标,如果某个位置的数 \leq 9 了,就从 set 中被删除了。查找位置复杂度 O(logn) ,最坏情况下每个位置被找 3 次。整体时间复杂度 O(n \log n)

不是吧,有错误吧,代码发错了吧,这题应是set+二分呀,你是不是弄成另外一道题了。

那我就把代码删了

建议O(n log n)打成:
O(n \log n)
$O(n \log n)$

OK