leetcode 2和c参考稀疏表前缀和的限制运算必须是可逆的,即可以通过在更大范围和更小范围上执行运算来计算。它仅适用于范围总和查询,不能用于获取max, min, gcd, bitwise and, bitwise or查询。例如,如果给定范围0....4和0....10,则不可能找到5....10的max。

稀疏表基础知识:如果我们创建小块并预先计算max,那么最多两个块可以给出更大范围的答案。块的最佳大小应该是多少?一种选择是,创建每2个连续块的块,这将给出O(n/2)的时间复杂度。其他选项是创建4/8、16等大小的块。

如何处理查询?获取给定范围low和high的差异为m,以2的幂分割给定数字m,最大尺寸为log m。例如5 = 4 + 1。我们需要对所有有符号位重复此操作。每个查询的时间复杂度为O(logm),它适用于sum、max、min、gcd等计算。

块的步骤:假设在创建大小为4的块之前,我们必须创建大小为2的块。块大小为4的答案可以由两个大小为2的块来回答,总时间将等于总块数的最大值。我们可以制作logn块,总块数为n。