题目:



大体思路:
我们实际上可以暴力更新答案,注意到如果一个位置上的数 \leq 9 那么更新实际上没用,于是维护一个 \geq 10 的数的列表,每次只更新区间内列表的数即可。
因为 a[i] \leq 10^9 ,假设 f(x) 为 x 的数位和,则 f(a[i]) \leq 81 , f(f(a[i])) \leq 18 , f(f(f(a[i])))\leq9 ,也就是每个位置最多被更新 3 次,常数级别。
维护列表可以用 set 来维护,set里存储所有$\geq10$ 的数的下标,如果某个位置的数 \leq 9 了,就从 set 中被删除了。查找位置复杂度 O(logn) ,最坏情况下每个位置被找 3 次。整体时间复杂度 O(n \log n) 。