题意简述
有 $n$ 个豆子,第 $i$ 个坐标为 $(x_i + \varepsilon, y_i + \varepsilon)$,颜色 $c_i$($\varepsilon = 0.5$)。总的坐标范围 $[0, lim]$,求有多少个格点矩形能够包含所有不同颜色的豆子。$n\le 2000$。
主要思路
离散化,枚举矩形左边界做 $O(n)$ 次。
考虑把右边界从 $lim$ 枚举回左边界。
那么现在左右边界确定。考虑对每一个纵坐标 $y$ 维护 $a_y$,满足对于下边界为 $y$ 时,只要上边界大于 $a_y$ 整个矩形就包含所有颜色。
不难发现,任意时刻 $a_y$ 单调不降;右边界从右往左枚举的时候,一次只会把 $a$ 的一个后缀对某个数取 max。
线段树,$O(n^2\log n)$。
参考代码
1 |
|
突然发现我开始染上了新的恶习:
对于几个if
短句喜欢直接拿&&
连接。
1 | if(A) if(B) C; |