P7448 [Ynoi2007] rdiq


区间本质不同逆序对,要求线性空间。

/(/mathcal O(n /sqrt n /times /sqrt n)/) 应该谁都会做,而且谁都知道不能过。

回顾 P5047,考虑莫队二次离线。

记 /(f(l,r)/) 为 /([l,r]/) 中 /(>a_r/) 的数的种类数。

则区间转移从 /([l,r-1]/) 变成 /([l,r]/),令 /(r’/) 为 /(a_r/) 上一次出现的位置,则贡献为 /(f(l,r)-f(l,r’)/),其他方向和一连段转移同理。

考虑到种类数难以维护,尝试通过扫描线转换为总数,问题转化为 /(/mathcal O(n)/) 次单点修改,/(/mathcal O(n /sqrt n)/) 次矩阵和查询,第一维是下标,第二维是值域,此时点的横坐标和纵坐标一一对应,即横坐标和纵坐标两两不同。

我们需要一个针对上述问题的 /(/mathcal O(/sqrt n)-/mathcal O(1)/) 数据结构。

引入二维分块,即对 /(n/times n/) 的矩阵进行适当地分块,使得块数 /(/mathcal O(/sqrt n)/) 且支持 /(/mathcal O(/sqrt n)-/mathcal O(1)/) 或 /(/mathcal O(1)-/mathcal O(/sqrt n)/)。

首先用将整个矩形用 /(n^{0.75}/times n^{0.75}/) 来分块(如图红色部分),这样总块数为 /(/mathcal O(n^{0.25}/times n^{0.25}=/sqrt n)/) 的,整块复杂度保证。

考虑分剩余块,使得较小块复杂度保证,不证:

  • /(n^{0.25}/times n^{0.25}/) 个 /(n^{0.75}/times n^{0.5}/) 大小的块,蓝色部分。
  • /(n^{0.25}/times n^{0.25}/) 个 /(n^{0.5}/times n^{0.76}/) 大小的块,绿色部分。
  • /(n^{0.25}/times n^{0.25}/) 个 /(n^{0.5}/times n^{0.5}/) 大小的块,橙色部分。

如图,例:/(155/)。

P7448 [Ynoi2007] rdiq

最后考虑灰色块复杂度,由于询问横坐标和纵坐标两两不同,而灰色块宽度不超过 /(/mathcal O(/sqrt n)/),涉及的询问只有 /(/mathcal O(/sqrt n)/) 种,故散块修改 /(/mathcal O(/sqrt n)/),查询 /(/mathcal O(1)/),复杂度保证。

时间复杂度为 /(/mathcal O(n/sqrt n)/),空间复杂度为 /(/mathcal O(n)/)。

CODE

原创文章,作者:kepupublish,如若转载,请注明出处:https://blog.ytso.com/267076.html

(0)
上一篇 2022年6月14日
下一篇 2022年6月14日

相关推荐

发表回复

登录后才能评论