hdu1542 Atlantis (线段树|扫描线)

Spacedesk保姆级教程:用旧平板给Windows电脑当副屏,从安装到避坑一步到位 本文提供Spacedesk保姆级教程,教你如何将旧平板变成Windows电脑的副屏,从软件安装到网络配置、显示优化及声音交互,一步步避开常见陷阱。通过WiFi实现扩展屏功能,支持4K分辨率和60Hz刷新率,让闲置设备焕发新生。 阅读详情

Atlantis

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 11253    Accepted Submission(s): 4778


Problem Description
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 different regions of Atlantis. Your friend Bill has to know the total area for which maps exist. You (unwisely) volunteered to write a program that calculates this quantity.
 

Input
The input file consists of several test cases. Each test case starts with a line containing a single integer n (1<=n<=100) of available maps. The n following lines describe one map each. Each of these lines contains four numbers x1;y1;x2;y2 (0<=x1<x2<=100000;0<=y1<y2<=100000), not necessarily integers. The values (x1; y1) and (x2;y2) are the coordinates of the top-left resp. bottom-right corner of the mapped area.

The input file is terminated by a line containing a single 0. Don’t process it.
 

Output
For each test case, your program should output one section. The first line of each section must be “Test case #k”, where k is the number of the test case (starting with 1). The second one must be “Total explored area: a”, where a is the total explored area (i.e. the area of the union of all rectangles in this test case), printed exact to two digits to the right of the decimal point.

Output a blank line after each test case.
 

Sample Input
2 10 10 20 20 15 15 25 25.5 0
 

Sample Output
Test case #1 Total explored area: 180.00
题目大意:给出n个矩形(左上角和右下角两个坐标),求总的矩形面积,重复的部分只算一次。
思路:线段树+离散化+扫描线。
#include<cstdio> 
#include<cstring> 
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn=1000005;
int mark[maxn<<2];
double sum[maxn<<2],thash[maxn];
struct node
{
	double l,r,h;
	int cover;
	node(){}
	node(double a,double b,double c,int d):l(a),r(b),h(c),cover(d){}
	bool operator <(const node&x)const
	{
		return h<x.h;
	}
}s[maxn<<2];
void updatefather(int pos,int l,int r)
{
	if(mark[pos])
	{		
		sum[pos]=thash[r+1]-thash[l];
	}
	else if(l==r)sum[pos]=0;//变成一个点,所以没长度
	else sum[pos]=sum[pos<<1]+sum[pos<<1|1];
}
void update(int pos,int l,int r,int ql,int qr,int value)
{
	if(ql<=l&&r<=qr)
	{	
		mark[pos]+=value;
		updatefather(pos,l,r);
		return;
	}
	int mid=(l+r)>>1;
	if(ql<=mid)update(pos<<1,l,mid,ql,qr,value);
	if(qr>mid)update(pos<<1|1,mid+1,r,ql,qr,value);
	updatefather(pos,l,r);
}
int main()
{
	int n,cas=1;
	while(scanf("%d",&n)==1&&n)
	{
		memset(mark,0,sizeof(mark));
		int m=0,num=2;
		double x1,x2,y1,y2,ans=0;
		for(int i=0;i<n;i++)
		{
			scanf("%lf%lf%lf%lf",&x1,&y1,&x2,&y2);
			s[m]=node(x1,x2,y1,1);
			thash[++m]=x1;
			s[m]=node(x1,x2,y2,-1);
			thash[++m]=x2;
		}
		printf("Test case #%d\n",cas++);
		sort(s,s+m);
		sort(thash+1,thash+1+m);
		for(int i=2;i<=m;i++)if(thash[i]!=thash[i-1])thash[num++]=thash[i];
		for(int i=0;i<m;i++)
		{
			int L=lower_bound(thash+1,thash+num,s[i].l)-thash;
			int R=lower_bound(thash+1,thash+num,s[i].r)-thash-1; 
			if(i)ans+=sum[1]*(s[i].h-s[i-1].h);
			update(1,1,num-1,L,R,s[i].cover);
		}
		printf("Total explored area: %.2lf\n\n",ans);
	}
}


Android音频学习(十四)——加载音频设备 loadHwModule 是 Android 音频系统的核心初始化函数,负责加载音频硬件抽象层(HAL)的模块实现。它建立 AudioPolicyService 与底层硬件的桥梁,将配置文件(audio_policy_config.xml)中的标签<module>定义转化为可操作的硬件对象,加载的是音频硬件模块(HAL实现),每个模块对应一种音频设备类型,以动态库的形式存在,负责与底层音频硬件交互。 阅读详情

相关推荐

别再到处找密钥了!手把手教你搞定Halcon 24.11/25.05的试用授权(附每月更新提醒)

本文详细介绍了Halcon 24.11/25.05试用授权的获取与配置方法,包括解密新版授权机制、快速配置指南、每月更新规律及多版本共存管理技巧。帮助开发者避免常见授权问题,提升工作效率,特别适合机器视觉领域的初学者和专业人士。

weixin_29238147的博客 1157

hdu1542 Atlantis(线段树+扫描线)

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

weixin_44118043的博客 195

HTB Attacking GraphQL Skills Assessment

通过枚举应用,利用GraphQL API,发现sql注入点,然后利用找到flag。

qq_33522010的博客 453

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

AlphaFold2算法详解

正文:https://www.nature.com/articles/s41586-021-03819-2 补充文件:https://static-content.springer.com/esm/art%3A10.1038%2Fs41586-021-03819-2/MediaObjects/41586_2021_3819_MOESM1_ESM.pdfhttps://static-content.springer.com/esm/art%3A10.1038%2Fs41586-021-03819-2/Med

Daisy4的博客 1万+

飞书云文档API操作详细介绍

开通云文档API、python程序调用飞书api、飞书获取app_id和app_secret、

Brother_ning的博客 1万+

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

STK与Matlab连接报错?手把手教你解决mexConnect函数执行问题(附完整避坑指南)

本文针对STK与Matlab连接时常见的“mexConnect函数执行”报错,提供了完整的诊断与解决方案。文章深入剖析了错误根源在于路径冲突或文件损坏,并手把手指导用户通过定位STK连接器文件、正确配置Matlab路径(包括使用addpath命令)以及执行初始化测试三步走策略,彻底解决问题。同时附上版本兼容性检查、安装避坑指南及构建稳健工作流的建议,帮助用户建立可靠的STK-Matlab联合仿真环境。

yolo5detector的博客 472

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

多传感器融合SLAM指南:如何结合视觉与激光雷达提升建图精度

本文深入探讨了多传感器融合SLAM技术,详细解析了如何将视觉传感器与激光雷达(特别是3D激光雷达)进行深度融合以提升建图精度与鲁棒性。文章从传感器特性分析、数据同步标定、前端融合策略(松耦合与紧耦合)到后端优化与地图构建,提供了完整的实战指南,并重点介绍了V-LOAM等经典融合框架的核心思想,旨在帮助开发者构建适应复杂动态环境的高精度SLAM系统。

weixin_29056145的博客 535

基于Termux的Android平台OpenClaw部署:移动端AI助理实现

本文介绍了在Android设备上通过Termux部署OpenClaw AI助理的方案。Android设备的便携性、Termux提供的完整Linux环境以及多样化的硬件配置使其成为理想的部署平台。文章详细分析了不同级别Android设备的硬件规格(从入门级到旗舰级),并提供了最低/推荐配置要求。部署步骤包括Termux安装初始化、Python环境配置以及性能优化建议。该方案充分利用Android设备的传感器和电池供电优势,为移动办公、学习等场景提供了低成本、高便携性的AI助理解决方案。

博客 3011

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

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

swallowblank的博客 267

后台管理系统-7-vue3之引入配置文件baseURL

mock=false,本地模拟。mock=true,线上模拟。baseURL+url=实际请求的URL。get请求param参数,post请求data参数。

qq_20466211的博客 207

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

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

HDU1542 Atlantis (线段树 + 扫描线)

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

Fau的博客 841

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

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

hdu 1542 Atlantis 线段树 + 扫描线

比较经典的一道题,线段树 + 扫描线,今年第一次看到这道题懵懵懂懂感觉以前做过,不过找不到代码了记得以前也是一知半解现在看也不会索性又研究了一下,现在再看这个东西感觉有点想法了,不过对于细节还是不知道该怎么处理。最后看了题解ac,不过这次是真的懂了以后也不怕了。 题意大致是给了几个相互重叠的矩形然后让你求出其面积。 将每个矩形的上下两条水平边存到数组中(得记录这条边是下边还是上边,为了

beyhhhh的博客 419

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

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1542 解题思路: Part 1 扫描线相关介绍: 简而言之,按顺序扫过这些个正方形的竖边,然后处理当前竖边在y轴上的投影 每一个矩形都有两条边,入边就对区间覆盖一次,出边就消去一次。(不是全部清除) 如图,两个有重叠的矩形的面积就分成了三部分算。 每次只要算 两条竖边的间距×在y轴...

shadiao.的博客 436

HDU 1542 Atlantis 线段树+扫描线

求n个矩形的面积并。 看了一下扫描线,这个东西和某场BC的贪心题目类似,就是一个矩形拆成两个线段,标记一下矩形开始的线段和结束的线段,那么这个矩形的面积就是两条线段所在的坐标差*线段长度..就是线段树建立方式和普通的有点差别...[l,r]拆分成两个区间的时候要一个拆成[l,mid],另外一个不是[mid+1,r]而是[mid,r]..然后多加一个push_up可以省好多事... 弱的线段树扫

462

HDU1542 Atlantis(线段树+扫描线)

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

KeyboardPianist的博客 640
上一篇: hdu 3586 Information Disturbing
下一篇: POJ 3311 Hie with the Pie
overload1997
博客等级 码龄11年 328粉丝 210原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值