把博客园图标替换成自己的图标
把博客园图标替换成自己的图标end

题解 [AT_joisc2014_i][BZOJ4237]稻草人

传送门

题意

有 $n$ 个节点,问有多少对节点满足一个在左下角,一个在右下角,且其中没有一个节点。

$1\le n\le 2 \times 10^5$,$0 \le X_i\le 10^9$,$0 \le Y_i\le 10^9$。

分析

我们可以先打暴力,$O(n^3)$。
暴力枚举每个点对,再枚举第三个点,观察是否有节点在这两个节点中间。

优化一

显然过不了,我们紧接着可以先对于 $X_i$ 进行排序,然后用线段树维护在区间内的最大 $X$ 值。
倘若两个点之间的 $X$ 最大值大于我们枚举的前边的点,那么说明这个点对之间有另一个点。
时间复杂度 $O(n^2 \log n)$。

优化二(正解)

因为作者是个蒟蒻,CDQ 打的不流利,因此仍然选择了线段树。
我们可以用线段树维护最值,同时我们还可以维护在这个 $Y$ 上方的节点所能得到的贡献。
现在的问题又变成了我们该如何合并两个区间。
很显然,我们的上方的区间的原有答案可以直接被我们的当前区间继承。
而我们的下方的区间,我们则可以继承大于等于我们上方区间最大值的点数。

时间复杂度 $O(n\log^2 n)$

Code

posted @ 2023-05-16 19:48  djh0314  阅读(15)  评论(0)    收藏  举报  来源
浏览器标题切换
浏览器标题切换end