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