一种序列 O(k) 单点加,O(k n ^ {1 / k}) 查询区间和的方法(O(n) 空间?)

就是把 \([0, n]\) 中的数用某个 \(B\) 进制表示,\(B\) 满足 \(n < B^3\),然后记录 \(sum_{1\sim k, i}\) 表示(应该是)B 进制下下标以 \(i\) 为开头的数的和。

反正当 \(k = 2\) 时就是经典的根号平衡操作——\(\mathcal O(1)\) 单点加,\(\mathcal O(\sqrt n)\) 区间查询(查询前缀后差分)。

感觉本质和线段树差不多,不过线段树是令 \(k = \log_2 n\),那么单点加是 \(\log_2 n\) 的,查询区间和是 \(O(n^{1/\log2_n}\log_2{n} = n^{\log_n 2}\log_2 n = \log_2 n)\) 的。
posted @ 2024-11-08 15:05  SkyMaths  阅读(52)  评论(0)    收藏  举报