Loading

分块套娃。

2026 upd:发现了 这篇题解,写的比我好。

不知道什么时候看 这个 受到的启发。

娱乐项目,不必认真对待。这个做法对问题的要求太高了,难一点的问题没法这么做。

众所周知, 正常的分块做单点加区间求和, 时间复杂度高达 \(O(1)-O(n^{1/2})\) (修改-询问).

这太慢了,于是考虑改一下分块的大小. 更改块的大小为 \(n^{2/3}\), 整块的复杂度成功变成了 \(O(n^{1/3})\)! 但是散块的复杂度变成了 \(O(n^{2/3})\)。

于是考虑套娃, 对每个块再套用正常的分块, 块的大小是 \(n^{1/3}\). 于是时间复杂度就变成了 \(O(1)-O(n^{1/3})\)!

闲的没事实现了一下,套娃之后确实更快。提交记录:
正常分块, 共耗时2.14s
分块套娃, 仅耗时1.11s

控制了一下变量。两份代码风格基本完全相同, 并且没有对这两份代码进行任何的卡常.

上面记录的提交时间不同, 但实际上我在分块套娃之后交了一发正常分块, 耗时反而比之前测的变长了。

这个玩意一直套下去时间复杂度好像是对的,当然需要把块长设为整幂数。

posted @ 2022-08-13 20:23  pjykk  阅读(74)  评论(0)    收藏  举报