如何求出各种二维偏序

如何求出各种二维偏序?

本章收录怎样的题?

1

收录类似于上图,区间修改、查询二维空间一定正斜交范围内点信息的问题。

目录

链接 离线否 描述 图示
二维树状数组 几乎所有问题 2
树状数组 - 3
扫描线 每次删除方框内的数,最后查询有多少被删除 3
线段树+双端队列 每次删除上下双方框内的数,并查询哪些数删除 4
二向树状数组 每次修改所有值,在线维护哪些点符合连续要求。 5

1. 二维树状数组

点数量n 坐标值域A 查数量Q 修数量R 时间复杂度 空间复杂度
\(n\) \(A\) \(m\) \(m\) \((n+m)\log A^2\) \(A^2\)

略。

2. 离线树状数组

点数量n 坐标值域A 查数量Q 修数量R 时间复杂度 空间复杂度
\(n\) \(A\) \(m\) \(m\) \((m+n)\log A\) \(n\)

略。

3. 扫描线

点数量n 坐标值域A 查数量Q 修数量R 时间复杂度 空间复杂度
\(n\) \(A\) \(1\) \(m\) \((m+n)\log n\) \(A\log A\)

开线段树存储一列里面的点。

4. 线段树+双端队列

点数量n 坐标值域A 查数量Q 修数量R 时间复杂度 空间复杂度
\(n\) \(A\) \(m\) \(m\) \((m+n)\log n\) \(A\log A+n\)

例题: 有害边树

开线段树维护每个 \(x\) 坐标所对应的一竖列上半部分方框的最下端 \(p1\) 和下半部分方框最上端 \(p2\) ,把 deque 里面不符合条件的弹出。由于每次询问要查询所对应的区间,所有点一共只会被弹出 \(n\) 次,复杂度 \((m+n)\log n\)

双端队列可以被换成 set

5. 二向树状数组

(或线段树)

点数量n 坐标值域A 查数量Q 修数量R 时间复杂度 空间复杂度
\(n\) \(A\) \(m\) \(m\) \((A+m)\log A\) \(3A\)

例题:传感器

由于维护的是【查询点的值是否在一段连续范围内】,我们只需要知道多久进入这段范围,多久出这段范围就行了。一个点可以由双向树状数组的 \(2\log(A)+1\) 个节点 (或线段树的 \(2\log(A)\) 个节点) 覆盖。因此当每个树状数组上的节点更改到【可能使该查询点更新的】值,就暴力更新查询点。

每个查询点对应 \(2\log(A)+1\) 个树状数组节点,每个树状数组节点进一次、出一次连续范围,因此总复杂度 \(4n\log A\)

posted @ 2024-10-21 20:21  DZhearMins  阅读(6)  评论(0编辑  收藏  举报