求 \(n\) 个矩形的面积并

Solution

将矩形转化为 \(y_1\) 位置的 + 修改 和 \(y_2\) 位置的 - 修改。然后按照 \(+y\) 顺序依次处理所有的修改,到达的一个新的位置就算一下上一段的总贡献。

至于线段树,要么对 \(x\) 坐标离散化,要么动态开点。 我觉得后者比较快乐。

注意这里的标记没有必要下传

#include <bits/stdc++.h>
using namespace std; const int N = 5000005; struct event{
int x1,x2,y,z;
bool operator < (const event &b) {
return y < b.y;
}
} e[N]; int n,m,a[N],cnt[N],tag[N],ch[N][2],ind=1; void pushup(int p,int l,int r) {
if(p==0) return;
a[0]=0;
if(cnt[p]) a[p]=r-l+1;
else a[p]=a[ch[p][0]]+a[ch[p][1]];
} void modify(int p,int l,int r,int ql,int qr,int c) {
if(l>qr||r<ql) return;
if(l>=ql&&r<=qr) {
cnt[p]+=c;
pushup(p,l,r);
}
else {
if(ch[p][0]==0) ch[p][0]=++ind;
if(ch[p][1]==0) ch[p][1]=++ind;
modify(ch[p][0],l,(l+r)/2,ql,qr,c);
modify(ch[p][1],(l+r)/2+1,r,ql,qr,c);
pushup(p,l,r);
}
} signed main() {
scanf("%d",&n);
for(int i=1;i<=n;i++) {
int x1,x2,y1,y2;
scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
++x1; ++x2;
e[i*2-1]=(event){x1,x2,y1,1};
e[i*2]=(event){x1,x2,y2,-1};
m=max(m,x2);
}
sort(e+1,e+2*n+1);
long long ans=0;
for(int i=1;i<=2*n;i++) {
if(e[i].y!=e[i-1].y) ans+=1ll*a[1]*(e[i].y-e[i-1].y);
modify(1,1,m,e[i].x1+1,e[i].x2,e[i].z);
}
cout<<ans<<endl;
}

[P5490] 【模板】扫描线 - 线段树的更多相关文章

  1. 洛谷P3372 【模板】线段树 1

    P3372 [模板]线段树 1 153通过 525提交 题目提供者HansBug 标签 难度普及+/提高 提交  讨论  题解 最新讨论 [模板]线段树1(AAAAAAAAA- [模板]线段树1 洛谷 ...

  2. 洛谷P3373 【模板】线段树 2

     P3373 [模板]线段树 2 47通过 186提交 题目提供者HansBug 标签 难度提高+/省选- 提交  讨论  题解 最新讨论 为啥WA(TAT) 题目描述 如题,已知一个数列,你需要进行 ...

  3. hdu 3074 Multiply game(模板级线段树)

    离机房关门还有十分钟,这点时间能干些什么?故作沉思地仰望星空,重新捋一下一天的学习进度,或者,砍掉一棵模板级线段树. 纯模板,就是把单点更新,区间求和改为单点更新,区间求积. 1A. #include ...

  4. 线段树练习 3&&P3372 【模板】线段树 1

    题目描述 Description 给你N个数,有两种操作: 1:给区间[a,b]的所有数增加X 2:询问区间[a,b]的数的和. 输入描述 Input Description 第一行一个正整数n,接下 ...

  5. Luogu3373【模板】线段树2

    P3373[模板]线段树2 题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数加上x 2.将某区间每一个数乘上x 3.求出某区间每一个数的和 输入输出格式 输入格式: 第一行 ...

  6. HDU 3642 - Get The Treasury - [加强版扫描线+线段树]

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3642 Time Limit: 10000/5000 MS (Java/Others) Memory L ...

  7. 【BZOJ3958】[WF2011]Mummy Madness 二分+扫描线+线段树

    [BZOJ3958][WF2011]Mummy Madness Description 在2011年ACM-ICPC World Finals上的一次游览中,你碰到了一个埃及古墓. 不幸的是,你打开了 ...

  8. 洛谷 P3373 【模板】线段树 2 解题报告

    P3373 [模板]线段树 2 题目描述 如题,已知一个数列,你需要进行下面三种操作: 1.将某区间每一个数乘上\(x\) 2.将某区间每一个数加上\(x\) 3.求出某区间每一个数的和 输入输出格式 ...

  9. HDU 3265/POJ 3832 Posters(扫描线+线段树)(2009 Asia Ningbo Regional)

    Description Ted has a new house with a huge window. In this big summer, Ted decides to decorate the ...

  10. 【bzoj4491】我也不知道题目名字是什么 离线扫描线+线段树

    题目描述 给定一个序列A[i],每次询问l,r,求[l,r]内最长子串,使得该子串为不上升子串或不下降子串 输入 第一行n,表示A数组有多少元素接下来一行为n个整数A[i]接下来一个整数Q,表示询问数 ...

随机推荐

  1. mysql 报错:Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column. To disable safe mode, toggle the option in Preferences

    目录 #事故现场 #解决方法 #事故现场 mysql执行update操作报错: sql如下: update psmp.Users set name='Jack' where name='Lily'; ...

  2. Windows下 JDK1.8环境配置

    安装JDK1.8,安装时会安装jdk.jre. 如果只是在IDEA中写写代码,安装完jdk,在IDEA中指定jdk路径就可以了. 如果要在命令行下执行jdk的命令,比如java.javac,或者要使用 ...

  3. windows10禁止更新

    1. WIN10 禁止自动更新 转载于https://jingyan.baidu.com/article/1e5468f94dc9a3484961b7a8.html 方法一:(注册表方式关闭) 在co ...

  4. cf936B

    题意简述:给出一个有向图,问从s出发是否能找到一条长度为奇数的路径并且路径的端点出度为0,存在就输出路径,如果不存在判断图中是否存在环,存在输出Draw,否则输出lose 题解:类似于DP,将每一个点 ...

  5. Sercet sharing

    Secret Sharing Shamir门限 条件: \(0<k\leq n<p\) \(S<p,p\)是素数 Lagrange插值公式 \[ f(x)=\sum^{k}_{j=1 ...

  6. python命令行工具的使用——argparse

    argparse是一个常用的库函数,使用它的时候我们在命令行中不仅仅可以运行python文件,更可以零时调整参数,十分方便. 首先,如果你只是希望传一丢丢数据进去,那么只看下面两行就行了 import ...

  7. 2.Android网络编程-web介绍以及Tomcat安装使用

    1.CS和BS CS:Client/Server 客户端和服务器,这种软件往往需要安装.比如QQ.迅雷.播放器. 优点 :  可以减轻服务器端压力,将部分代码写到客户端,并且界面很美观. 缺点 :  ...

  8. ajax发送请求下载字节流形式的excel文件

    背景 开发项目中导出功能,因为数据量有点大,所以导出可能需要时间有点长,所以想用ajax异步请求. 存在问题 利用传统的js和jquery提供的ajax相关获取响应的方式是无法实现excel文件下载的 ...

  9. PyQt5【入门-窗口】

    一.窗口 #设置窗口标题 setWindowTitle("标题") #设置窗口坐标和大小 setGeometry(0,0,800,600) """ 项 ...

  10. @Autowired、@Resource、@Qualifier区别

    @Autowired 1.属于spring的注解,如果不想和Spring耦合的太紧,就不推荐使用. 2.默认情况下,要求依赖对象必须存在,不能为null.如果允许为空,那么设置属性值required为 ...