当前位置: 首页 > news >正文

P1884 [USACO12FEB] Overplanting S

传送门

题目描述

在一个笛卡尔平面坐标系里(则X XX轴向右是正方向,Y YY轴向上是正方向),有N ( 1 ≤ N ≤ 1000 ) N\ (1 \le N \le 1000)N(1N1000)个矩形,第i ii个矩形的左上角坐标是( x 1 , y 1 ) (x_1,y_1)(x1,y1),右下角坐标是( x 2 , y 2 ) (x_2,y_2)(x2,y2)。问这N NN个矩形所覆盖的面积是多少?

注意:被重复覆盖的区域的面积只算一次。

输入格式

第一行,一个整数N ( 1 ≤ N ≤ 1000 ) N\ (1 \le N \le 1000)N(1N1000)

接下来有N NN行,每行描述一个矩形的信息,分别是矩形的x 1 , y 1 , x 2 , y 2 ( − 10 8 ≤ x 1 , y 1 , x 2 , y 2 ≤ 10 8 ) x_1,y_1,x_2,y_2(-10^8 \le x_1,y_1,x_2,y_2 \le 10^8)x1,y1,x2,y2(108x1,y1,x2,y2108)

输出格式

一个整数,被N NN个矩形覆盖的区域的面积。

输入输出样例 #1

输入 #1

2 0 5 4 1 2 4 6 2

输出 #1

20

思路

本题为扫描线模板题,可左转学习。

但此题与模板不同,有一坑点:它给出的左下角的y 1 y1y1有可能比右下角的y 2 y2y2大,所以遇到这种情况需要交换y 1 y1y1y 2 y2y2

代码

#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongstructdid{intl,r,lc,rc,tag,c;}tr[400001];structline{inty1,y2,x,f;}l[200001];boolcmp(line a,line b){returna.x<b.x;}intn,y[200001],tot;longlongans;voidbuild(intl,intr){tot++;intp=tot;tr[p].l=l,tr[p].r=r,tr[p].lc=tr[p].rc=-1,tr[p].c=tr[p].tag=0;if(l==r)return;intmid=(l+r)>>1;tr[p].lc=tot+1;build(l,mid);tr[p].rc=tot+1;build(mid+1,r);}voidpushup(intl,intr,intp){if(tr[p].tag==0){if(l==r)tr[p].c=0;elsetr[p].c=tr[tr[p].lc].c+tr[tr[p].rc].c;}}voidchange(intl,intr,intc,intp){if(tr[p].l>=l&&tr[p].r<=r){tr[p].tag+=c;if(tr[p].tag)tr[p].c=y[tr[p].r+1]-y[tr[p].l];elsetr[p].c=0;pushup(tr[p].l,tr[p].r,p);return;}intmid=(tr[p].l+tr[p].r)>>1;if(r<=mid)change(l,r,c,tr[p].lc);elseif(l>mid)change(l,r,c,tr[p].rc);elsechange(l,mid,c,tr[p].lc),change(mid+1,r,c,tr[p].rc);pushup(tr[p].l,tr[p].r,p);}signedmain(){ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);cin>>n;for(inti=1;i<=n;i++){intx1,y1,x2,y2;cin>>x1>>y1>>x2>>y2;if(y1>y2)swap(y1,y2);y[(i<<1)-1]=y1;y[i<<1]=y2;l[(i<<1)-1]=(line){y1,y2,x1,1};l[i<<1]=(line){y1,y2,x2,-1};}n<<=1;sort(y+1,y+1+n);sort(l+1,l+1+n,cmp);intcnt=unique(y+1,y+1+n)-(&y[1])-1;build(1,cnt);for(inti=1;i<n;i++){inty1=lower_bound(y+1,y+cnt+2,l[i].y1)-y;inty2=lower_bound(y+1,y+cnt+2,l[i].y2)-y-1;change(y1,y2,l[i].f,1);ans+=tr[1].c*(l[i+1].x-l[i].x);}cout<<ans;return0;}
http://www.jsqmd.com/news/582109/

相关文章:

  • 如何避免机械拼凑式的基金申请书撰写
  • idea比对两个文件差异
  • 随笔其二
  • 基于蓝牙及GSM的智能防盗系统设计与实现
  • 2026全自动三坐标测量机品牌实力榜单:谁更值得选? - 品牌推荐大师
  • 华硕笔记本终极性能控制指南:用GHelper取代臃肿的Armoury Crate
  • 3步掌握创意工坊壁纸高效获取工具
  • 2026届毕业生推荐的十大AI写作助手推荐榜单
  • 3个核心价值:Tiktokenizer如何解决AI开发中的令牌管理难题
  • 佰力博压电 d33-F(动态力)测试:精准表征压电材料动态性能
  • 2026最新西南银行备考/银行招聘培训推荐!贵阳地区优质机构权威榜单 - 十大品牌榜
  • AgentCPM-Report轻量化部署方案:Pixel Epic镜像免环境配置快速上手指南
  • 2026最新舞蹈艺考培训学校推荐!云南昆明优质机构权威榜单发布 - 十大品牌榜
  • 面向对象进阶 继承
  • Windows系统下Docker Desktop环境的完整迁移方案,包含镜像、容器和数据卷的备份恢复方法 将笔记本上Docker Desktop 东西迁移本地PC 电脑Docker Desktop上
  • 第三方系统集成若依权限校验
  • 【Python实战】搭建AI数字人对话系统:从语音识别到虚拟形象的全流程实现
  • 【数据要素+数据资产合集】100余份数据要素+数据资产方案资料合集(PPT+WORD)
  • MJh代码混淆实战指南:使用Obfuscar构建坚不可摧的安全防线
  • 基于Matlab的轴承-空心转轴-飞轮不同耦合类型动力学分析
  • N_m3u8DL-RE:跨平台流媒体解决方案的全方位技术指南
  • JPEGView:Windows平台终极快速图像查看器完全指南
  • 谭待在养虾之城说了两件事,Seedance 2.0公测与ArkClaw场景化落地
  • 喧嚣过后,重塑「数字光环」:后 315 时代的 GEO 合规新纪元
  • 2026最新艺考培训机构推荐!云南/昆明优质艺考机构权威榜单发布 - 十大品牌榜
  • Python爬虫入门实战——从环境搭建到数据抓取(新手友好版)
  • 机械识图:半剖视图
  • 基于TMS320F28033的20MHz手持式双踪袖珍示波器设计与实现
  • 2026制造业海外社媒代运营与海外品牌营销推广:推荐几家海外营销推广代运营公司及Linkedin营销服务商(附带联系方式) - 品牌2026
  • Unsloth快速部署:conda环境配置+模型下载完整教程