P2061 [USACO07OPEN]城市的地平线City Horizon

扫描线

扫描线简化版

流程(本题为例):

把一个矩形用两条线段(底端点的坐标,向上长度,添加$or$删除)表示,按横坐标排序

$upd:$本题的底端点坐标简化为$(x,0)$

蓝后对纵坐标建一棵线段树(本题需要对高度进行离散化)。

每次对线段树进行覆盖$or$删除区间操作,顺便统计一下$k=$有多少点被覆盖到

而两次(线段)操作之间的长度为$r=x_{i}-x_{i-1}$

于是两条线段之间被覆盖的面积即为$k*r$

(某退役选手又一次省出了宝贵的1.5h)

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define N 40010
struct line{
int l,h,f;// l:横坐标 h:向上高度 f:添加/删除
line(){}
line(int A,int B,int C):
l(A),h(B),f(C){}
bool operator < (const line &tmp) const{
return l<tmp.l;
}
}a[N<<];
int x[N],n,cnt,tn,sum[N<<],tag[N<<],res;
long long ans;
#define lc o<<1
#define rc o<<1|1
#define mid l+((r-l)>>1)
void upd(int o,int l,int r,line e){
if(l>=r) return; //左端点在本题中简化成0,下同
if(x[r]<=e.h) tag[o]+=e.f;//覆盖层数增加/减少
else{
upd(lc,l,mid,e);
if(e.h>x[mid]) upd(rc,mid,r,e);//注意mid~mid+1的区间不可被忽略
}sum[o]= tag[o]? x[r]-x[l]:sum[lc]+sum[rc];//是否被完全覆盖
}
int main(){
scanf("%d",&n); int q1,q2,q3;
for(int i=;i<=n;++i){
scanf("%d%d%d",&q1,&q2,&q3);
a[++cnt]=line(q1,q3,);
a[++cnt]=line(q2,q3,-);//一个矩形用两条线段表示
x[i+]=q3;//存横坐标用于离散化
}sort(a+,a+cnt+);//(线段)操作按横坐标排序
sort(x+,x+n+);x[]=-;//注意要加上坐标(0,0)
for(int i=;i<=n+;++i)
if(x[i]!=x[i-]) x[++tn]=x[i];//离散化
upd(,,tn,a[]);
for(int i=;i<=cnt;++i){
ans+=1ll*sum[]*(a[i].l-a[i-].l);//累计两条线段间的面积
upd(,,tn,a[i]);
}printf("%lld",ans);
return ;
}

bzoj1645 / P2061 [USACO07OPEN]城市的地平线City Horizon(扫描线)的更多相关文章

  1. 线段树+扫描线【bzoj1645】[USACO07OPEN]城市的地平线City Horizon

    Description 约翰带着奶牛去都市观光.在落日的余晖里,他们看到了一幢接一幢的摩天高楼的轮廓在地平线 上形成美丽的图案.以地平线为 X 轴,每幢高楼的轮廓是一个位于地平线上的矩形,彼此间可能有 ...

  2. [题目] luogu P2061 [USACO07OPEN]城市的地平线City Horizon

    算法 线段树 + 离散化 思路 对\((x,y,h)\)的左右端点\(x,y\)进行离散化,离散化前的原值记为\(val[i]\),对每个矩形按高度\(h\)从小到大排序. 设离散化后的端点有\(M\ ...

  3. 洛谷 P2061 [USACO07OPEN]城市的地平线City Horizon

    简化版的矩形面积并,不用线段树,不用离散化,代码意外的简单 扫描线,这里的基本思路就是把要求的图形竖着切几刀分成许多矩形,求面积并.(切法就是每出现一条与y轴平行的线段都切一刀) 对于每一个切出来的矩 ...

  4. Luogu_2061_[USACO07OPEN]城市的地平线City Horizon

    题目描述 Farmer John has taken his cows on a trip to the city! As the sun sets, the cows gaze at the cit ...

  5. POJ 3277 City Horizon(扫描线+线段树)

    题目链接 类似求面积并..2Y.. #include <cstdio> #include <cstring> #include <string> #include ...

  6. 【BZOJ1645】[Usaco2007 Open]City Horizon 城市地平线 离散化+线段树

    [BZOJ1645][Usaco2007 Open]City Horizon 城市地平线 Description Farmer John has taken his cows on a trip to ...

  7. bzoj1645 [Usaco2007 Open]City Horizon 城市地平线

    Description Farmer John has taken his cows on a trip to the city! As the sun sets, the cows gaze at ...

  8. 1645: [Usaco2007 Open]City Horizon 城市地平线

    1645: [Usaco2007 Open]City Horizon 城市地平线 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 315  Solved: ...

  9. BZOJ_1654_[Usaco2007 Open]City Horizon 城市地平线_扫描线

    BZOJ_1654_[Usaco2007 Open]City Horizon 城市地平线_扫描线 Description N个矩形块,交求面积并. Input * Line 1: A single i ...

随机推荐

  1. nowcoder2018年全国多校算法寒假训练营练习比赛(第一场)

    [气死我了 写完了博客发布 点看来一看怎么只剩下一半不到的内容了!!!!!!!!!!] [就把卡的那两道放上来好了 其余的不弄了 生气!!!!!] 可以说是很久没有打比赛了 今天这一场主要是  基础算 ...

  2. 基于Solr和Zookeeper的分布式搜索方案的配置

    1.1 什么是SolrCloud SolrCloud(solr 云)是Solr提供的分布式搜索方案,当你需要大规模,容错,分布式索引和检索能力时使用 SolrCloud.当一个系统的索引数据量少的时候 ...

  3. ZOJ 2760 - How Many Shortest Path - [spfa最短路][最大流建图]

    人老了就比较懒,故意挑了到看起来很和蔼的题目做,然后套个spfa和dinic的模板WA了5发,人老了,可能不适合这种刺激的竞技运动了…… 题目链接:http://acm.zju.edu.cn/onli ...

  4. 东哥讲义2 - 基于TCP,UDP协议的攻击,分析与防护

    TCP SYN FLOOD 攻击 正常的TCP三次握手过程: 处于SYN FLOOD攻击状态时的三次握手过程: 查看示例:x_syn.c文件,一个实现了自定义mac,ip,tcp头部的syn floo ...

  5. SecureFX 中文乱码

      1. 找到SecureFX配置文件夹(选项–全局选项,常规下的配置文件夹),比如:C:\Users\James\AppData\Roaming\VanDyke\Config\Sessions 2. ...

  6. stress test - volume test

    D:\wamp64\bin\mysql\mysql5.7.11\bin>mysqlslap --delimiter=";" --query=" INSERT I N ...

  7. Visibility from other objects

    php.net <?php class Test { private $foo; public function __construct($foo) { $this->foo=$foo; ...

  8. Linux下的反调试技术

    Linux下的反调试技术 2014年01月30日 ⁄ 综合 ⁄ 共 2669字 ⁄ 字号 小 中 大 ⁄ 评论关闭 转自  http://wangcong.org/blog/archives/310 ...

  9. Mysql 时间类型精度截取的bug

    mysql-connector-java版本升级出现的一次问题.涉及到了时间精度的截取和四舍五入. 首先了解一点,timestamp,datetime如果不指定精度,默认的精度是秒. 当mysql-c ...

  10. kubernetes实战(十三):k8s使用helm持久化部署harbor集成openLDAP登录

    1.基本概念 上节在k8s中部署了harbor和ldap,本节将部署harbor使用openLDAP验证,部署方式与之前相同,只是改了adminserver-cm.yaml的AUTH_MODE: &q ...