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

#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. java调用新浪接口根据Ip查询所属地区

    import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import ...

  2. Loadrunner基本概念解析<一>

    学习性能测试前需要掌握的基本概念,以下做一个记录,本文会持续更新,我期望的是,用通俗简洁的语言来进行更好的理解. [基本概念如下:] ---并发用户数: 1️⃣错误的理解:    使用系统的全部用户数 ...

  3. UVA11988 【Broken Keyboard (a.k.a. Beiju Text)】:题解

    题目链接:https://www.luogu.org/problemnew/show/UVA11988 这题虽说是和链表有关的模拟,但其实并不是很需要啊,但蒟蒻用了(说的好听是练手,说的难听是太弱), ...

  4. 洛谷P1140 相似基因

    题目:https://www.luogu.org/problemnew/show/P1140 分析: 本题一看就知道是一道动归,其实和字串距离非常的像,只不过多了题目规定的匹配相似度罢了. 匹配的相似 ...

  5. delegate委托的例子,实现对Form中控件的更新

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  6. 判断list集合不为空

    在java开发中新手容易将判断一个list集合是否为空,只以If(list!=null)去判断,且容易和isEmpty()混淆,但是,list集合为空还是为null,是有区别的. 先看一下下面的例子, ...

  7. C#3.0新增功能09 LINQ 标准查询运算符 02 查询表达式语法

    连载目录    [已更新最新开发文章,点击查看详细] 某些使用更频繁的标准查询运算符具有专用的 C# 语言关键字语法,使用这些语法可以在查询表达式中调用这些运算符. 查询表达式是比基于方法的等效项更具 ...

  8. [leetcode] 19. Remove Nth Node From End of List (Medium)

    原题链接 删除单向链表的倒数第n个结点. 思路: 用两个索引一前一后,同时遍历,当后一个索引值为null时,此时前一个索引表示的节点即为要删除的节点. Runtime: 13 ms, faster t ...

  9. 【MySQL】(五)索引与算法

    本篇文章的主旨是对InnoDB存储引擎支持的索引做一个概述,并对索引内部的机制做一个深入的解析,通过了解索引内部构造来了解哪里可以使用索引. 1.InnoDB存储引擎支持以下几种常见的索引: B+树索 ...

  10. .Net MVC 动态生成LayUI tree

    .Net MVC 动态生成LayUI tree 最近在做项目的过程中需要用到Tree插件,所以找了一堆Tree发现LayUI的Tree样式比较好看,所以开始搞! 1.Layui部分 1.1 首先引用文 ...