题解:P7601 [THUPC2021] 区间本质不同逆序对
Iruka_Okazaki · · 题解
problem & 双倍经验 & blog
低配版本
拆解问题
定义
由于几个转移都差不多,我们以
我们知道答案会加上
经过转化,我们依然需要求 种类数。我们对于数组做一次扫描线,扫到
所以问题就变成了求 总数。要求 单点加和区间内大于
因为我们使用了莫队二离,所以我们需要处理一下练个操作。
注意在此处有两个性质:
-
第二维的值取决于第一维的值
-
保证所有的
x 坐标和y 坐标不同
由于我们需要平衡复杂度,所以我们需要维护一个数据结构其修改操作的时间复杂度为
我们可以使用二维分块进行维护。
二维分块
注意:此处讲的与上面的有稍许不同,但本质一样。
假如说我们需要位于这样一个可爱的矩阵(左下角为
下面我们令
我们按照如下规则进行分块:
-
先分出
\sqrt n 个\bf c \times c 个红块。 -
对于红块域分成
\sqrt n 个\bf b \times b 个绿块。 -
接着将平面分成一个个大小为
n \times \mathbf{c} 个区域。然后分出\sqrt n 个大小为\bf c \times b 个橙块。 -
再竖着将平面分成一个个大小为
\mathbf{c} \times n 和区域,每个区域分成\sqrt n 个大小为\bf b \times c 个蓝块。
加入一个点时需要分别以红块,绿块,橙块和蓝块做二维前缀和。所以修改/加入的复杂度即为
因此可以把一个询问分成这样。
此处借了
接下来就考虑散块的贡献,即为上图中黄色的区域。
由于上面的性质,我们可以把散块分成下面的样子:
然后对于每一次的插入,我们枚举紫色范围内的
对于粉色部分,我们枚举粉色范围内的
然后注意蓝色区域块不要算重复就行了。
code