hdu 1542 Atlantis(线段树,扫描线)

Maven的下载安装配置教程(详细图文) 目录 一、简单了解一下什么是Maven 二、maven的下载 三、maven的安装 四、maven的环境变量配置 五、setting文件配置 六、开发工具配置Maven 一、简单了解一下什么是Maven Maven就是一款帮助程序员构建项目的工具,我们只需要告诉Maven需要哪些Jar 包,它会帮助我们下载所有的Jar,极大提升开发效率。 1.Maven翻译为“专家“, ”内行”的意思,是著名Apache公司下基于Java开发的开源项目。 2.Maven项目对象模型(POM)是一.. 阅读详情

链接:http://acm.hdu.edu.cn/showproblem.php?pid=1542

题意:n个矩阵,给出每个矩阵的左下和右上两个点的坐标,求出所有矩形总的覆盖面积。


扫描线问题,因为坐标是浮点型,那就必须把坐标离散化,我这直接上map了。

再来就是求这个面积的方式了:我这是向y轴映射,那么就保存每一条竖线,包扩该条竖线的x坐标,上下两个y坐标,还有用lr保存这条竖线是左边(1)那条还是右边(-1)那条,然后将所有的竖边按x从小到大排序,再一条一条地插入。看图:


先插入第一条竖边A1A2,再查询整棵数被覆盖的长度dy(即求出y坐标之差),这时候dy*(下一条边的x-插入这的条边的x)就等于第一部分的面积,以此类推。

插入A1A2可以求第一部分面积

插入B1B2可以求第二部分面积

插入C1C2可以求第三部分面积

最后一条不用插入

还有用1和-1标识左右边在这里也能看出来,当插入C1C2的时候,-1和插入A1A2时的1相抵消,表示这个区间不再覆盖,就避免了后面再计算时错误判断dy的值。

代码:

#include<cstring>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<map>
#define MAXN 1050
using namespace std;
struct ele
{
	double x,yu,yd;
	int lr;
	bool operator < (ele t) const
	{
		return x<t.x;
	}
}a[MAXN*2];
struct node
{
	int l,r;
	int cover;
}t[MAXN*5];
double yy[MAXN*2];
void construct(int l,int r,int p)
{
	t[p].l=l,t[p].r=r,t[p].cover=0;
	if(r-l<=1) return ;
	int m=(l+r)>>1;
	construct(l,m,p*2);
	construct(m,r,p*2+1);
}
void modify(int l,int r,int val,int p)
{
	if(t[p].l==l&&t[p].r==r)
	{
		t[p].cover+=val;
		return ;
	}
	int m=(t[p].l+t[p].r)>>1;
	if(r<=m)
		modify(l,r,val,p*2);
	else if(l>=m)
		modify(l,r,val,p*2+1);
	else
	{
		modify(l,m,val,p*2);
		modify(m,r,val,p*2+1);
	}
}
void query(double &ans,int p)
{
	if(t[p].cover)
	{
		ans+=yy[t[p].r]-yy[t[p].l];
		return ;
	}
	else if(t[p].r-t[p].l>=1)
	{
		t[p*2].cover+=t[p].cover,t[p*2+1].cover+=t[p].cover;
		query(ans,p*2);
		query(ans,p*2+1);
		t[p*2].cover-=t[p].cover,t[p*2+1].cover-=t[p].cover;
	}
}
int main()
{
	int n,i,j,cas=1;
	double x1,x2,y1,y2;
	map<double,int> hash;
	while(scanf("%d",&n)&&n)
	{
		for(i=1,j=1;i<=n;i++,j+=2)
		{
			scanf("%lf%lf%lf%lf",&x1,&y1,&x2,&y2);
			a[j].x=x1,a[j].yd=y1,a[j].yu=y2;
			a[j].lr=1;
			a[j+1].x=x2,a[j+1].yd=y1,a[j+1].yu=y2;
			a[j+1].lr=-1;
			yy[j]=y1,yy[j+1]=y2;
		}
		sort(a+1,a+1+n*2);
		sort(yy+1,yy+1+2*n);
		int up=unique(yy+1,yy+1+2*n)-yy-1;
		for(i=1;i<=up;i++)
			hash[yy[i]]=i;
		double res=0,dy;
		construct(1,up,1);
		for(i=1;i<2*n;i++)
		{
			dy=0;
			modify(hash[a[i].yd],hash[a[i].yu],a[i].lr,1);
			query(dy,1);
			res+=dy*(a[i+1].x-a[i].x);
		}
		printf("Test case #%d\n",cas++);
		printf("Total explored area: %.2lf\n\n",res);
	}
	return 0;
}


IP-Guard分类管理详解 大家都知道在配置IPGUARD策略前需要做分类库进行设置和分类。 1、应用程序:可以分类,例如上班时间只能用OFFICE和WPS,记事本等办公软件,可以在分类里设置一个类 ;办公软件,在未分类里找到OFFICE,WPS等拖入心建的分类里就可以在配置策略里调用。 2、网站分类也不一样,可以按照自己方式自定义。也可以导入厂家已经收集到的网站分类。 3、邮箱分类:可以提前定义好一个或... 阅读详情

相关推荐

微型纵向加密在新能源场站中的实战部署与运维避坑指南

本文详细解析了微型纵向加密在新能源场站中的实战部署与运维技巧。通过国密算法SM4实现数据加密,确保新能源场站通信安全,同时提供非侵入式部署方案和运维避坑指南,帮助提升网络稳定性和运维效率。

weixin_30505225的博客 596

HDU 1542 [POJ 1151] Atlantis (矩形面积并)

Atlantis Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 16139    Accepted Submission(s): 6598 Problem Description There are severa

acmer_mozhu的博客 550

金蝶云星空-协同开发云-安装开发环境

金蝶协同开发云就是不需要每一个开发都在自己的本机安装开发环境,自己安装可容易出错,包括源代码管理也一并解决了,大大减少了开发人员的工作量和降低了上手的难度。

qq_33881408的博客 5596

Atlantis POJ 1151 HDU 1542

题目链接: POJ HDU There are several ancient Greek texts that contain descriptions of the fabled island Atlantis. Some of these texts even include maps of parts of the island. But unfortunately, thes

wood 453

VisionPro实战:5个工业视觉检测案例详解(附代码片段)

本文详细解析了VisionPro在工业视觉检测中的5个实战案例,包括PCB焊点质量检测、汽车齿轮尺寸测量、药品包装缺陷检测等。通过硬件配置方案和软件算法流程的详细介绍,帮助工程师快速掌握VisionPro的应用技巧,提升工业自动化检测效率。

weixin_29284657的博客 518

CUDA编程 - Nsight system & Nsight compute 的安装和使用 - 学习记录

在 cuda 编程中,经常会用到 Nsight system 和 Nsight compute 进行性能分析等,下面做个学习总结。本篇包括安装和常用分析思路总结,具体实践操作总结会放在下一篇博客。

点云算法工程师 1万+

Atlantis

题述《 http://poj.org/problem?id=1151 》 #include<stdio.h> #include<algorithm> using namespace std; struct line { double x1,y1,y2; int isl; }verl[257]; struct node { int l,r; dou...

莓尊尊strawberry 210

【AIGC】大模型面试高频考点09-大模型Agent框架

聚焦AIGC专业技术分享

一个内容严谨、方向前沿、极具实践价值的AI大模型技术分享站 1967

【HDU】1542 Atlantis 线段树+扫描线

代码如下: #include #include #include using namespace std ; #define ls ( o << 1 ) #define rs ( o << 1 | 1 ) #define rt o , l , r #define root 1 , 1 , n #define lson ls , l , m #define rson rs , m

poursoul 818

LVGL iPhone Duo 开合过渡

环境:LVGL 9.x(需要软件模糊),窗口建议 1280×800。界面文案英文(默认 Montserrat 无 CJK)。

摸鱼专家 149

Autosar MCAL-S32k324 Crypto配置-基于EB

NXP官网提供了免费的HSE固件,同时也提供了对应的协议栈。本文以算法为例,介绍MCAL相关的配置及在代码中的集成与使用。使用HSE计算,比软件算法确实方便许多。后面会完善更多的算法测试。

赞的博客 2435

Atlantis - HDU 1542 扫描线

Atlantis Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 7210    Accepted Submission(s): 3173 Problem Description There are several

提比的强行AC 656

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

hdu1542 Atlantis(线段树+扫描线)

线段树+扫描线 hdu1542 Atlantis 矩形的坐标不一定是整数 #include <iostream> #include <cmath> #include <algorithm> #include <cstring> #include <cstdio> #include <cstdlib> #include &lt...

weixin_44118043的博客 195

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

HDU - 1542 Atlantis (线段树+扫描线)

HDU - 1542 Atlantis (线段树+扫描线) There are several ancient Greek texts that contain descriptions of the fabled island Atlantis. Some of these texts even include maps of parts of the island. But unfortun...

weixin_43179892的博客 194

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

HDU - 1542 - Atlantis (线段树扫描线求矩形并)

题目连接: HDU - 1542 - Atlantis大佬博客讲解通过观察可以发现,以y轴为扫描线从下往上扫,若一个区间下边数量大于上边,则扫描的过程中这部分肯定算面积的,因此用线段树维护这样的区间就行了。#include<bits/stdc++.h> using namespace std; typedef double ld; const int N=207; int n,m; struct L

On the way 286

HDU 1542 Atlantis(线段树扫描线)

http://acm.hdu.edu.cn/showproblem.php?pid=1542 Atlantis Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 6788    Accepted Submission(s):

fcbruce 1334

HDU1542-Atlantis【离散化&线段树&扫描线】个人认为很全面的详解

HDU1542-Atlantis【离散化&线段树&扫描线】个人认为很全面的详解 刚上大一的时候见过这种题,感觉好牛逼哇,这都能算 如今已经不打了,不过适当写写题保持思维活跃度还是不错的,又碰到这种题了,想把它弄出来 说实话,智商不够,看了很多解析,花了4、5个小时才弄明白 网上好多都是直说一半,弄得我很难受,需要查看很多题解不...

swallowblank的博客 267

Atlantis HDU - 1542(线段树扫描线)

There are several ancient Greek texts that contain descriptions of the fabled island Atlantis. Some of these texts even include maps of parts of the island. But unfortunately, these maps describe diff...

tomjobs的博客 480

HDU1542 Atlantis (线段树 + 扫描线)

题目链接:Atlantis 大致题意 现在有平面直角坐标系xoy, 有n个平行于x轴y轴的矩形, 给出这些矩形的左上角和右下角的坐标, 让你求出这些矩形组成的图形的总面积. 解题思路 本题是 线段树 + 扫描线 的典型例题, 是十分经典的模版题. 分析: 例如需要求下图所示的矩形的面积总和: 我们不妨将所有矩形的所有边都延长, 然后将整个坐标轴划分成一个个小区域: 然后再将这些小区域按照垂直于x轴的直线再次划分成一个个小矩形(如下图阴影所示): 现在我们需要计算的总面积可以拆分成图中阴影部分的面积之和

Fau的博客 841

HDU1542 Atlantis 【线段树】【扫描线入门】

题意 给你n个矩形,算出他们覆盖了多少面积 思路 总结一下扫描线的套路 把矩形的上下边 按照 左端点的x坐标 右端点的x坐标 高度 为上位边还是下位边存起来 当作扫描线 根据高度排序,从低到高,也就是y坐标 把所有x坐标都提取出来 排序离散化 线段树维护的节点 为x坐标某个区间内左端点 右端点 下位边的总长度 下位边的数量 如果扫描线下标为1~m 循环1 ~ m-1 m条扫描线 循...

OOOak 303

线段树扫描线 hdu1542 Atlantis

这几天线段树学习中,但是扫描线这一段一直没写出代码来 努力了好几天终于可以了 这里是写扫描线代码需要注意的地方: 1.每次插入一条线段的时候 只有当该线段和该节点表示的线段恰好相等的时候,才对mark标记一下,即使是区间包含插入的线段也要向下推。 2.不需要延迟标记,因为你插入了一条线段以后一定会完完全全的删除  3.每次更新的时候 ,先找到最底下一层(也就是插入线段和节点所管理的线段正好

beating_spark 281

HDU 1542 Atlantis 【线段树+扫描线】

题目链接 segment tree, scanning line 题意 矩形面积的并 分析 最基础的扫描线求矩形面积并的题,离散化后用线段树,这个思想很简单,不再赘述。记录在这里主要是这个线段树的写法,适用于区间反复覆盖,RE了很多次,记在这里方便以后查看。 AC代码 //HDU 1542 Atlantis //AC 2016-10-19...

babao9492的博客 174

HDU - 1542 Atlantis[线段树+扫描线]

题目描述 HDU - 1542 求矩阵面积并。 好久没写题解了。。。哎,这道题折腾了我好几天。。。 不知道为什么zcydalao讲的方法不太好使,我AC不了,可能是我菜吧。。。于是用了某本蓝书的方法,这种方法明显更加简单粗暴。 解析: 线段树+扫描线经典题。 遇到这种求矩形面积并或者某些平面轮廓的问题时,我们通常有一种一般方法——扫描线。 具体而言,就是先任意选一条坐标轴,用一根平行于它...

weixin_30396699的博客 175

HDU 1542 Atlantis(线段树:扫描线)

HDU1542 Atlantis(线段树:扫描线) 题意: 二维平面有n个平行于坐标轴的矩形,现在要求出这些矩形的总面积. 重叠部分只能算一次. 分析:        首先假设有下图两个矩阵,我们如果用扫描线的方法如何计算它们的总面积呢? 首先我们将矩形的上下边分为上位边(即y坐标大的那条平行于x轴的边),和下位边(y坐标小的平行于x轴的边).然后我们把所有矩形的上下位边按照他们y坐标

code 9792

HDU1542(扫描线+线段树)Atlantis

HDU1542 Atlantis(求矩形面积并) 原题链接 模板题: #include <bits/stdc++.h> #define ll long long using namespace std; int n,cnt[4*100000]; struct smx { double x1,x2,y; int value; } p[200005]; int cmp(sm...

翔哥哥的博客 229

HDU1542 Atlantis【线段树+扫描线+离散化】

Atlantis http://acm.hdu.edu.cn/showproblem.php?pid=1542 Time Limit: 2000/1000 MS (Java/Others)Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 21633Accepted Submission(s): 8576...

逐梦者 332
上一篇: poj3667 Hotel (线段树区间合并)
下一篇: hdu 1732 Push Box(BFS)
yjCola
博客等级 码龄14年 4粉丝 138原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值