Luogu7601 [THUPC2021] 区间本质不同逆序对

题意:给定一个长为 的序列

次询问,每次询问给定一个区间 ,求

,时限 ,空限


考虑莫队。

先考虑左端点移动的贡献。右端点在将序列和值域同时翻转后可以转化为左端点。

下一次出现的位置。

减小至

考虑新增的本质不同逆序对。

移动到 时, 会构成逆序对 。(当然,不保证全是新的)

而对于所有 都必然与 重复。

对于所有 ,若 中出现过,则重复,否则不会重复。

也就是说,我们要计算的是 : 在 中出现过,但在 中没出现过,且 的数的种类数。

的数的种类数。不难发现上面要计算的东西

我们每次需要计算的一组 是相同的。

问题转化为了 的计算。


看做三维平面上的点 ,则有:

可以先预处理 ,这样上式变为 :

这是三维偏序。

先将 按照 排序,逐次加入,消去了 的约束。

然后我们需要一个维护动态二维偏序的数据结构。


的二维平面分成 的块(称作大块)。对这些块维护二维前缀和。(红色)

将每个“大块”(按两个方向)分成 的块(称作“中块”)。对每一行 / 列“大块”维护内部 个“中块”的二维前缀和。(蓝色)

又将每个 “大块” 分成 的块(称作“小块”)。对每个“大块”维护内部“小块”的二维前缀和。(绿色)

然后我们剩下的就是 : 询问两条边界附近宽度不超过 的区域。(黄色)

对于黄色部分,我们不再维护前缀和,转而考虑每个点的贡献。

点在某个询问的黄色部分的充要条件:该询问覆盖了该点,但没有完全覆盖该点所在的小块。

注意到询问的端点形如 ,只有 个本质不同的端点,且符合上述条件的端点只有 个(需要对 进行重标号,避免重复),于是可以暴力枚举并进行贡献。

时间复杂度 ,空间复杂度