根号分治和莫队

· · 个人记录

根号分治与莫队

根号分治是一种奇怪的分块

莫队

莫队思想

莫队实现

排序

why?

奇偶性排序用于减少指针移动的总次数,从而降低时间复杂度

莫队基本思想是将数组分块,按左端点所在块排序,同块内按右端点升序排序,这样左指针在块间移动时,右端点尽可能单调递增,减少来回移动

但同一块内的查询若全部按右端点升序排序,可能会出现以下问题:

奇偶性排序的优化逻辑

规则是:

关键优化在于

复杂度

单独考虑左端点:复杂度为O(m \sqrt n)

单独考虑右端点,复杂度为O(n \sqrt n)

综上,时间复杂度为O(m \sqrt n + n \sqrt n),因为n, m同阶,所以是O(2n \sqrt n)

不同阶时

复杂度为O( n * n / m)

步骤

块大小 block = \sqrt n

维护变量: