题解 [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。

浙公网安备 33010602011771号