首页 > 其他分享 >扫描线

扫描线

时间:2024-05-04 15:46:17浏览次数:27  
标签:right int ll 扫描线 ans rectangles axis

题目链接

https://leetcode.cn/problems/rectangle-area-ii/

题目大意

image

题目思路

题目代码

#define ll long long
const int MOD = 1e9 + 7;
class Solution {
public:
    int rectangleArea(vector<vector<int>>& rectangles) {
        vector<int> x_axis;
        for(auto x:rectangles){
            x_axis.push_back(x[0]);
            x_axis.push_back(x[2]);
        }
        sort(x_axis.begin(),x_axis.end());
        ll ans = 0;
        for(int i = 0;i < x_axis.size() - 1;++i){
            int left = x_axis[i],right = x_axis[i + 1];
            int w = right - left;
            if(w == 0) continue;
            vector<array<int,2>> y_axis;
            for(auto x:rectangles){
                if(x[0] <= left && right <= x[2])
                    y_axis.push_back({x[1],x[3]});
            }
            sort(y_axis.begin(),y_axis.end());
            int h = 0,l = -1,r = -1;
            for(auto y:y_axis){
                if(y[0] > r){
                    h += r - l;
                    l = y[0],r = y[1];
                }else if(y[1] > r){
                    r = y[1];
                }
            }
            h += r - l;
            ans = (ans  + (ll)w * h) % MOD;
        }
        return ans;
    }
};

标签:right,int,ll,扫描线,ans,rectangles,axis
From: https://www.cnblogs.com/gebeng/p/18172371

相关文章

  • 扫描线的应用1
    概述顾名思义,扫描线通常是在二维空间内,模拟一条线上下扫描,以此达到解决求二维空间的矩形面积或点数问题。实现方法通常采用排序,离散化等操作。排序是为了扫描的不重不漏,而离散化是由于我们模拟的扫描线会一段段扫描,可以去掉重复的信息。 矩形面积1151--Atlantis给定平......
  • 扫描线
    扫描线是什么&矩形面积并本质上可以理解为,对一个二维(或多维)平面上的问题,通过扫描一维,并且用数据结构动态维护另一位的增减性。我们对于\(x\)轴扫描,那么会对面积构成影响的\(y\)显然只有红色的几条和绿色的几条。容易发现,这样的线的数量是\(2n\)的(\(n\)为矩形个数)。......
  • 换维扫描线
    简介一般来说,我们处理某些可以离线的问题,我们会将询问离线,然后将修改挂在左端点或右端点,然后从左往右扫描这些修改,并处理询问,数据结构记录的一般是下标\(i\)到当前走到的地方的一些信息。而换维扫描线则采取了截然相反的措施:我们将区间修改转化成差分,然后从左往右扫描序列,线段......
  • 计算几何——扫描线 学习笔记
    计算几何——扫描线学习笔记你会发现我的笔记的顺序和很多扫描线的讲解是反着来的。其实是和我老师给的课件完全是逆序(谁帮我算一下逆序对啊喵)。前言一开始以为扫描线就是用来求二维几何图像的信息的。但是其实这个并不准确。个人认为,扫描线其实是一个思想,就像动态规划一样......
  • 扫描线学习笔记
    1.引入扫描线多用于图形上,是一条线在图形上扫来扫去,它一般被用来解决图形面积,周长,以及二维数点等问题。2.扫描线求面积并如下图:我们模拟一条扫描线,使它从下往上扫过整个平面,这条扫描线会在遇到横向线段的时候停下来更新一些东西。那么整个图形就可以找出四条线段,如图:更新的......
  • 【学习笔记】扫描线
    bilibili:BV1Mm411D7kr讲了一下。模板代码:面积并:#include<cstring>#include<iostream>#include<algorithm>#defineintlonglongusingnamespacestd;namespaceIO{template<typenameT>Tread(Tx){Tsum=0,opt=1......
  • 扫描线
    扫描线的精髓是通过离线、引入时间维,把静态询问降低一维、变成动态问题。一般是先把若干询问通过可减性变成前缀询问,再离线、从左到右排序,从左到右一个一个地一边加入元素,一边回答询问。以下是例题+一句话题解。(虽然可能不是真的一句话)平面最值二维平面上\(n(\le10^5)\)个......
  • 线段树维护扫描线
    你需要实现一种数据结构支持以下操作:区间加减1保证加减区间一一对应,且先加后减,序列中永远不出现负数。查询完整序列中0的个数#include<cstdio>#include<algorithm>constintmaxn=1e5+10;longlongx[maxn*2];structsegmentTree{ structnode { i......
  • 扫描线
    AcWing247.亚特兰蒂斯题意:给定若干个矩形(长宽均平行于坐标轴),求它们的面积并(矩形的顶点坐标可以是实数)。本题是扫描线算法的模板题。扫描线,顾名思义,就是按照一条线扫过去,对于本题扫描线-OIWiki(oi-wiki.org)如上图,这就是扫描线的过程。发现按照线扫描的话,每次我们只需......
  • 【模板】扫描线
    【模板】扫描线题目描述求$n$个四边平行于坐标轴的矩形的面积并。输入格式第一行一个正整数$n$。接下来$n$行每行四个非负整数$x_1,y_1,x_2,y_2$,表示一个矩形的四个端点坐标为$(x_1,y_1),(x_1,y_2),(x_2,y_2),(x_2,y_1)$。输出格式一行一个正整数,表示$n$个......