AcWing 247. 亚特兰蒂斯 线段树,pushdown

有几个古希腊书籍中包含了对传说中的亚特兰蒂斯岛的描述。

其中一些甚至包括岛屿部分地图。

但不幸的是,这些地图描述了亚特兰蒂斯的不同区域。

您的朋友 Bill 必须知道地图的总面积。

你自告奋勇写了一个计算这个总面积的程序。

输入格式
输入包含多组测试用例。

对于每组测试用例,第一行包含整数 n,表示总的地图数量。

接下来 n 行,描绘了每张地图,每行包含四个数字 x1,y1,x2,y2(不一定是整数),(x1,y1) 和 (x2,y2) 分别是地图的左上角位置和右下角位置。

注意,坐标轴 x 轴从上向下延伸,y 轴从左向右延伸。

当输入用例 n=0 时,表示输入终止,该用例无需处理。

输出格式
每组测试用例输出两行。

第一行输出 Test case #k,其中 k 是测试用例的编号,从 1 开始。

第二行输出 Total explored area: a,其中 a 是总地图面积(即此测试用例中所有矩形的面积并,注意如果一片区域被多个地图包含,则在计算总面积时只计算一次),精确到小数点后两位数。

在每个测试用例后输出一个空行。

数据范围
1≤n≤10000,
0≤x1<x2≤100000,
0≤y1<y2≤100000
注意,本题 n 的范围上限加强至 10000。

输入样例:
2
10 10 20 20
15 15 25 25.5
0
输出样例:
Test case #1
Total explored area: 180.00

样例解释
样例所示地图覆盖区域如下图所示,两个矩形区域所覆盖的总面积,即为样例的解。
在这里插入图片描述

这道题是一个经典的扫描线模型 , y总在这道题运用了离散化+线段树的方法。

对于刚入手线段树的我的确有一点点难度。
对于这道题,我们以每个长方形的横坐标开始进行运算。我们从小到大开始把所有的长方形的边填入到sg结构体数组中,存放之后,我们开始进行对所有长方形的纵坐标进行一个离散化,然后以离散化后的纵坐标构造线段树,注意,这里的线段树表示的是一个区间,比如l = 0 ,r = 0 表示ys[0] - ys[1]的区间,这就意味着我们不需要要用到ys.size()-1,所以我们只构造0 - ys.size()-2的线段树,我不知道只表示一个点是否可行,在这里是表示一个区间(可以去试试),然后每次按照x的顺序放入y1,y2,k,然后算出总面积 - res += (sg[i].x - sg[i-1]) * tr[1].len 1 表示所有y区间的被覆盖面积,输出面积.

代码如下:

在这里插入代码片
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值