模板题,想象一条线从左边扫到右边,只有在矩阵边界才会产生影响,所以我们离散化缩小数据范围,再用线段树维护扫描线上的情况,得出结果

#include<bits/stdc++.h>
#define ls k<<1
#define rs k<<1|1
#define int long long//注意要开longlong
using namespace std;
const int N=1e6+;
int val[N<<];
struct Seg_Tree{
int l,r,sum,cnt;
}tr[N<<];
inline void build(int k,int l,int r){
tr[k].l=l,tr[k].r=r;
if(l==r)return;
int mid=(l+r)>>;
build(ls,l,mid);
build(rs,mid+,r);
}
inline void pushup(int k){
if(tr[k].cnt) tr[k].sum=val[tr[k].r+]-val[tr[k].l];
else tr[k].sum=tr[ls].sum+tr[rs].sum;//下传标记
}
inline void add(int k,int x,int y,int v){
if(tr[k].l>y||tr[k].r<x)return;
if(x<=tr[k].l&&tr[k].r<=y){
tr[k].cnt+=v;
pushup(k);
return;
}
add(ls,x,y,v);
add(rs,x,y,v);
pushup(k);
}
int n,cnt,tot,book[N<<];
struct node{
int x,yl,yr,flag;
}e[N<<];
bool cmp(node a,node b){return a.x<b.x||(a.x==b.x&&a.flag>b.flag);}
signed main(){
scanf("%lld",&n);
for(int i=,xl,xr,yl,yr;i<=n;i++){
scanf("%lld%lld%lld%lld",&xl,&yl,&xr,&yr);
book[++cnt]=yl;book[++cnt]=yr;
e[++tot].x=xl;e[tot].yl=yl;e[tot].yr=yr;e[tot].flag=;
e[++tot].x=xr;e[tot].yl=yl;e[tot].yr=yr;e[tot].flag=-;//离散化
}
sort(book+,book+cnt+);
int h=unique(book+,book+cnt+)-book-;
for(int i=;i<=tot;i++){
int pos1=lower_bound(book+,book+h+,e[i].yl)-book;
int pos2=lower_bound(book+,book+h+,e[i].yr)-book;
val[pos1]=e[i].yl;val[pos2]=e[i].yr;
e[i].yl=pos1;e[i].yr=pos2;//记录
}
sort(e+,e+tot+,cmp);
build(,,tot);
int ans=;
for(int i=;i<=tot;i++){
add(,e[i].yl,e[i].yr-,e[i].flag);
ans+=tr[].sum*(e[i+].x-e[i].x);//得出答案
}
cout<<ans<<endl;
}

Luogu P5490 扫描线的更多相关文章

  1. 【Luogu P5490】扫描线

    Luogu P5490 作为一道模板题让我卡了一个月…… 对于线段树+离散化新手而言这实在是太难了…… 有关离散化: 可以查看这一篇文章:https://www.jianshu.com/p/93476 ...

  2. BZOJ 4814 Luogu P3699 [CQOI2017]小Q的草稿 (计算几何、扫描线、set)

    题目链接 (BZOJ) http://lydsy.com/JudgeOnline/problem.php?id=4814 (Luogu) https://www.luogu.org/problem/P ...

  3. luogu P1856 [USACO5.5]矩形周长Picture 扫描线 + 线段树

    Code: #include<bits/stdc++.h> #define maxn 200007 #define inf 100005 using namespace std; void ...

  4. BZOJ 2731 Luogu P3219 [HNOI2012]三角形覆盖问题 (扫描线)

    题目链接: (bzoj)https://www.lydsy.com/JudgeOnline/problem.php?id=2731 (luogu)https://www.luogu.org/probl ...

  5. [P5490] 【模板】扫描线 - 线段树

    求 \(n\) 个矩形的面积并 Solution 将矩形转化为 \(y_1\) 位置的 + 修改 和 \(y_2\) 位置的 - 修改.然后按照 \(+y\) 顺序依次处理所有的修改,到达的一个新的位 ...

  6. [CERC2017]Intrinsic Interval——扫描线+转化思想+线段树

    [CERC2017]Intrinsic Interval https://www.luogu.org/blog/ywycasm/solution-p4747# 这种“好的区间”,见得还是比较多的了. ...

  7. 【学习笔记】线段树—扫描线补充 (IC_QQQ)

    [学习笔记]线段树-扫描线补充 (IC_QQQ) (感谢 \(IC\)_\(QQQ\) 大佬授以本内容的著作权.此人超然于世外,仅有 \(Luogu\) 账号 尚可膜拜) [学习笔记]线段树详解(全) ...

  8. 【Luogu P1502】窗口的星星

    Luogu P1502 题意很好理解,就是问给出的矩形套住的最大和. 但是做起来却十分麻烦. --来自疯狂爆10分的愤怒 一个比较高效的思路是--把每一个星星作为左下角向右上方拓展形成一个矩形, 拓展 ...

  9. luogu P1382 楼房

    二次联通门 : luogu P1382 楼房 /* luogu P1382 楼房 线段树 + 扫描线 + 离散化 正解貌似是堆... MMP...二段式线段树各种错误... 离散化一下横坐标 扫描线扫 ...

随机推荐

  1. Android调试移动端webview

    尝试了各种Mac版本的安卓模拟器,包括Android Studio.Genymotion以及国内的网易MuMu.夜神.蓝叠.腾讯手游助手,做的最好的是Android Studio,最难上手的也是And ...

  2. Java中的Enumeration、Iterable和Iterator接口详解

    前言 在看各类Java书籍或者博文的时候,总是会遇到Enumeration.Iterable和Iterator这三个接口,如果对这几个接口不是很明白的话,总会让自己看着看着就迷惑了,正好这周末,抽空把 ...

  3. 第一届合天杯河北科技大学网络安全技术大赛 web6 writeup

  4. Excel催化剂图表系列之一整套IBCS图表大放送,一秒变图表专家

    不知不觉,从2019年1月初开始打算来一波图表系列的功能,首选IBCS标准化图表,结果入坑后,一路跌至谷底,和预想的完全不是一个量级的工作量,为了追求一键式.通用化及细节的严谨性,过程中好几次文件报错 ...

  5. python虚拟环境管理 Pipenv 使用说明

    安装 pip install pipenv 检查是否安装成功 pipenv --version 创建虚拟环境(在工程文件夹下) pipenv install 默认下,Pipenv统一管理所有虚拟环境 ...

  6. CHM格式

    转载请标明出处:https://www.cnblogs.com/tangZH/p/11176995.html CHM格式为CHM头,CHM头节,内容三部分组成. 总体格式图: 初始化头包含了CHM的相 ...

  7. java练习---5

    //程序员:罗元昊  2017.9.17 package demo;import java.util.Scanner;public class Ly { public static void main ...

  8. web设计_7_页面缺失图片或CSS的情况下仍然易读

    1. 在任何可能使用背景图片的地方应设置同样的颜色的背景色. 防止图片不能加载的情况下,页面内容同样保持较好可读性. 例如文字为白色,背景图为深色,如果不设置背景色,当背景图未成功加载, 而浏览器多数 ...

  9. java反射原理及Class应用

    反射:框架设计灵魂 框架:半成品软件,可以在框架基础上进行软件开发,简化编码 反射:将类的各个组成部分封装我其他对象,这就是反射机制 好处:  1.可以在程序运行过程中,操作这些对象  2.可以解耦, ...

  10. PythonDay03

    ## 第三章 ### 今日内容 1.整型 2.布尔值 3.字符串 ​ 索引​ 切片​ 步长​ 字符串的方法 4.for循环 ### 1.整型 - python3:全部是整形- python2:整形,长 ...