思路:
tag上虽然打了分块但是与分块的关系只是正解的时间复杂度都是$O(\sqrt{n})$ (.
采用空间换时间的思路, 将一部分的询问直接储存下来.
对于$x \in [1,\sqrt{n})$的所有询问, 直接用二维数组储存询问, 空间复杂度为$O(\sqrt{n}^2) = O(n)$, 预处理的时间复杂度为$O(n\sqrt{n})$, 更改的时间复杂度为$O(\sqrt{n})$
对于$x \in [\sqrt{n},n]$的询问, 只有小于等于$\sqrt{n}$个数对答案有贡献, 因此可以直接暴力处理, 时间复杂度为$O(\sqrt{n})$.
空间复杂度为$O(n)$, 最坏情况下的时间复杂度为$O((m+n)\sqrt{n})$.
(事实上分界点也可以不选在$\sqrt{n}$处, 只要保证时间和空间不超范围就行).
代码:
1 |
|