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

扫描线总结

PS:

  • 线段树并不与扫描线绑定,此篇仅讲解更接近原理的 \(n^2\) 做法,线段树做法为基于此做法的时间优化。

扫描线(实则为一种思想)

  • 用处:求取图形面积、周长并
  • 思想:将整个图形用一条线扫过去,统计扫过一次得到的答案

实现过程:

以从左往右扫的矩形面积并为例:

预处理

  1. 将每个矩形的两个 \(y\) 坐标离散出来。
  2. 记录每个宽的 \(x\) 坐标与 \(y1\)\(y2\) 坐标,并像处理 \(()\) 一样将它们标记为\(\pm 1\)
  3. 要让线从左至右扫到每条宽,所以宽按 \(x\) 升序排序。
    struct Weith{ll x,y1,y2,v;}W[N<<1];bool cmpW(Weith a,Weith b){if(a.x==b.x) return a.v>b.v;//此行有必要,具体见周长并代码return a.x<b.x;}int main(){for(int i=1,x1,x2,y1,y2;i<=n;i++){cin>>x1>>y1>>x2>>y2;//如图中蓝线:左边的宽标为1,进入了矩形;右边的宽标为-1,退出了该矩形W[i*2-1]={x1,y1,y2,1};W[i*2]={x2,y1,y2,-1};//如图中红线:离散yy[i*2-1]=y1;y[i*2]=y2;}sort(W+1,w+2*n+1,cmpW);sort(y+1,y+2*n+1)ll tot =unique(y+1,y+2*n+1)-(y+1);}

扫描操作实现

  • 实现思路:
  1. \(y\) 已离散,每两个 \(y\) 之间的区间相互不交。对每两个 \(y\) 间的区间记一个 \(c\) ,记录当前区间是否被覆盖。
  2. 从左往右枚举每条宽 \(W_i\),判断每个区间 \(c_j\) 是否被覆盖。
  3. 如果该区间被覆盖,统计答案。
    1. 该步骤需在步骤 \(2\) 之前进行
    2. 如图,枚举到 \(x_3\) 时统计的面积为 \(x_2\)\(x_3\) 之间的阴影部分,不能先更改 \(c_j\)
    for(int i=1;i<=2*n;i++){for(int j=1;j<=tot;j++){//统计答案if(c[j]>0){//x3处重合的两条宽并不会将阴影部分统计两次,因为当枚举到i+1时W[i+1].x-W[i].x=0//每个cj对应的范围为 y[j] ~ y[j+1]ans+=(W[i].x-W[i-1].x)*(y[j+1]-y[j]);}//更新cjif(W[i].y1<=c[j]&&c[j]<W[i].y2){//下闭上开,不能重复统计c[j]+=W[i].v;}}}

矩形周长并:

  • 思路:
    • 长宽分别扫一遍(从下往上+从左往右)。
      • 排序细节:如图红线部分,两条边重合时,如果先减后加,会使该长度会被统计两次,但实则不应统计。
          struct Weith{ll x,y1,y2,v;}W[N<<1];struct Length{ll y,x1,x2,v;}L[N<<1];bool cmpW(Weith a,Weith b){if(a.x==b.x) return a.v>b.v;return a.x<b.x;}bool cmpL(Length a,Length b){if(a.y==b.y) return a.v>b.v;return a.y<b.y;}
      
    • 先看宽,对于每个 \(c\),最外侧的两条才会对答案产生贡献,即在 \(c_j\)\(0\rightarrow1\) 与从 \(1\rightarrow0\) 产生贡献。长同理。
http://www.hskmm.com/?act=detail&tid=34850

相关文章:

  • 2025年10月抗老面霜推荐:小鸟传领衔五强对比评测榜
  • 基于STM32芯片通过CAN总线控制电机运动
  • 2025 酒店家具厂家最新推荐榜:北木斋领衔五大新锐品牌,品质与创新双优之选全解析
  • 文献阅读笔记格式
  • Stream流
  • JS中的值传递和引用传递
  • 基于Java+Springboot+Vue开发的母婴商城管理系统源码+运行步骤
  • 乐理和蜂鸣器的实现
  • CF1288C Two Arrays 分析
  • 流水线
  • 基于MATLAB的谐波分析实现方案
  • 一文详解 | 纷享销客CRM如何助力快消巨头蒙牛实现全场景数字化转型
  • AI生成代码系列:开源代码片段检测的有效方法
  • 基于进化算法的自动神经架构搜索
  • 【tinyusb】首次使用
  • 2025 年西安标志标识厂家最新推荐排行榜:聚焦西北优质服务商,精选实力企业助您精准选型
  • 打卡
  • 2025年10月豆包关键词排名优化服务推荐排行榜:十大服务商深度对比与评测指南
  • 2025年10月豆包关键词排名优化服务推荐排行榜单:十大服务商深度对比与评测分析
  • 2025年10月豆包关键词排名优化服务排行榜:十家优质服务商综合评测与选择指南
  • 第五届计算机图形学、人工智能与数据处理国际学术会议
  • 利用arm板chroot修改其上位机的文件系统
  • 罗氏线圈开口处靠近电流易受干扰:原因、影响与抗干扰对策​
  • 一文看懂zk-STARK协议
  • 基于uIP协议栈移植FreeModbus TCP的方案
  • 给VitePress的右上角增加Github角标
  • 2025 年最新推荐即时通讯厂商权威推荐榜单:信创适配 + 私有化部署能力深度测评及政企选型指南
  • 砖形图量化策略需求文档
  • 第六届新型电力系统国际论坛——电力系统与新能源技术创新论坛
  • 2025 年面霜厂家最新推荐榜单:优质企业专利技术与一站式服务全景解析及选型指南抗衰霜/润唇霜/植物萃取面霜/抗老霜/保湿霜/修复霜厂家推荐