850. 矩形面积 II
我们给出了一个(轴对齐的)矩形列表 rectangles 。 对于 rectangle[i] = [x1, y1, x2, y2],其中(x1,y1)是矩形 i 左下角的坐标,(x2,y2)是该矩形右上角的坐标。
找出平面中所有矩形叠加覆盖后的总面积。 由于答案可能太大,请返回它对 10 ^ 9 + 7 取模的结果。
示例 1:
输入:[[0,0,2,2],[1,0,2,3],[1,0,3,1]]
输出:6
解释:如图所示。
示例 2:
输入:[[0,0,1000000000,1000000000]]
输出:49
解释:答案是 10^18 对 (10^9 + 7) 取模的结果, 即 (109)2 → (-7)^2 = 49 。
提示:
1 <= rectangles.length <= 200
rectanges[i].length = 4
0 <= rectangles[i][j] <= 10^9
矩形叠加覆盖后的总面积不会超越 2^63 - 1 ,这意味着可以用一个 64 位有符号整数来保存面积结果。
代码
/*
用扫描法。求x轴每个区间内的最大面积,即求vec[][1]与vec[][3](去重后)差的最大值。难点在于怎么求每个区间内的高。
*/
class Solution {
public:
void addlist(list<pair<int, int>>& y, int lv, int rv)
{
auto it = y.begin();
//(1)查找插入位置 当lv大于it的大值时且it不是y.end(),it后移
while (it != y.end() && lv > it->second)
it++;
//(2)找到插入点
//1》最后插,或者说是在里面所有区间中不包含这个区间,且没有重合
if (it == y.end() || it->first > rv)
y.insert(it, pair<int, int>(lv, rv)