HDU1542 Atlantis 基于线段树的扫描线

STM32与AD7606的SPI通信优化:提升高精度数据采集效率 本文深入探讨了STM32与AD7606的SPI通信优化策略,旨在提升高精度数据采集系统的效率与稳定性。文章从硬件连接、电源去耦、PCB布局等基础环节入手,详细解析了软件驱动中SPI模式配置、DMA应用及精准时序控制等关键优化技术,并提出了系统级的性能提升方案,帮助开发者解决高速采样下的数据跳动、效率瓶颈等实际问题。 阅读详情

该题求的是矩形的面积和(重叠部分只算一次)

思路:利用二分离散化坐标(因为是浮点数),以横轴建立坐标系,矩形的上下边的长度作为区间去构造线段树,

维护cnt[]数组(表示当前边属于下边还是上边,下边为-1,上边为1)和sum[]数组(当前区间覆盖的边的长度),

一开始我觉得很难看得懂,我也是调了别人AC的代码很久才明白的。

#pragma comment(linker, "/STACK:1024000000,1024000000")
#include <algorithm>  
#include <iostream>  
#include <cstdlib>  
#include <cstring>  
#include <string>
#include <cstdio>  
#include <climits>
#include <cmath> 
#include <vector>
#include <set>
#include <queue>
#include <stack>
#include <map>
#include <sstream>
#define INF 0x3f3f3f3f
#define LL long long
#define fora(i,a,n) for(int i=a;i<=n;i++)
#define fors(i,n,a) for(int i=n;i>=a;i--)
#define sci(x) scanf("%d",&x)
#define scl(x) scanf("%lld",&x)
#define MAXN 224
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
const double eps = 1e-8;
using namespace std;
int n,kk=1;
struct Segment{
	double l,r,h;
	int t;
	Segment(double _l,double _r,double _h,double _t){
		l=_l;r=_r;h=_h;t=_t;
	}
	Segment(){}
}segment[MAXN];
double X[MAXN];
int cnt[MAXN<<2];
double sum[MAXN<<2];
bool cmp(Segment a,Segment b){
	return a.h-b.h<1e-6;
}
int erfen(double num,int MAX){
	int l=0,r=MAX;
	while(l<r){
		int mid=(l+r)>>1;
		if(X[mid]<num) l=mid+1;
		else if(X[mid]==num) return mid;
		else r=mid-1;
	}
}
void pushup(int l,int r,int rt){
	if(cnt[rt]) sum[rt]=X[r+1]-X[l];
	else if(l==r) sum[rt]=0;
	else sum[rt]=sum[rt<<1]+sum[rt<<1|1];
}
void update(int L,int R,int v,int l,int r,int rt){
	if(L<=l&&r<=R){
		cnt[rt]+=v;
		pushup(l,r,rt);
		return;
	}
	int m=(l+r)>>1;
	if(L<=m) update(L,R,v,lson);
	if(R>m) update(L,R,v,rson);
	pushup(l,r,rt);
}
int main() {
#ifdef DID
	freopen("in.txt", "r", stdin);
	//freopen("out.txt","w",stdout);
#endif
	double x1,y1,x2,y2;

	while(sci(n)&&n){
		int k=0,z=1;
		memset(cnt,0,sizeof(cnt));
		memset(sum,0,sizeof(sum));
		fora(i,0,n-1){
			scanf("%lf%lf%lf%lf",&x1,&y1,&x2,&y2);
			X[k]=x1;segment[k++]=Segment(x1,x2,y1,1);
			X[k]=x2;segment[k++]=Segment(x1,x2,y2,-1);
		}
		fora(i,1,k-1)
			if(X[i]!=X[i-1]) X[z++]=X[i];
		sort(X,X+z);
		sort(segment,segment+k,cmp);
		double ans=0;
		fora(i,0,k-2){
			int l=erfen(segment[i].l,z-1);
			int r=erfen(segment[i].r,z-1)-1;
			update(l,r,segment[i].t,0,z-1,1);
			ans+=sum[1]*(segment[i+1].h-segment[i].h);
		}
		printf("Test case #%d\n",kk++);
		printf("Total explored area: %.2lf\n\n",ans);
	}
	return 0;
}


【Unity 实用工具篇】 | Book Page Curl 快速实现翻书效果 游戏和应用开发中,真实感的交互设计能显著提升用户体验。Unity3D图书翻页效果插件为开发者提供了一种便捷方式,可在项目中实现高度拟真的书籍翻页动画。 本文介绍该插件的快速使用方法,涵盖从基础导入到自动翻页效果创建的全过程,让我们快速实现翻页效果。 阅读详情

相关推荐

告别Overleaf!本地LaTeX环境配置:VSCode+TeXLive完全指南(Windows/Mac双平台)

本文详细介绍了如何在Windows和Mac平台上配置本地LaTeX环境,使用VSCode和TeXLive打造高效的专业写作工作流。从TeXLive安装到VSCode插件配置,再到高级技巧与性能优化,帮助用户摆脱Overleaf限制,实现更快速、更私密的学术写作体验。

3c4x5z6v7b的博客 952

hdu1542 Atlantis(线段树+扫描线)

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

weixin_44118043的博客 195

DC算法竞赛——北京PM2.5浓度回归分析

北京PM2.5浓度回归分析 比赛结果(118/1150) 一. 概述 1、项目来源:https://www.dcjingsai.com/static_page/cmpList.html 2、给定数据字段如下: 3、使用方法:回归算法 4、目的:预测北京pm2.5值,使平均预测误差越小越好。 二、分析过程 setwd("E:/R数据源") #读入数据 data <- read.csv('p...

玻璃球的博客 3474

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

芯片设计中的setup和hold检查:为什么你的电路会跑飞?

本文深入解析了芯片设计中Setup与Hold检查的核心原理,它们是确保电路可靠运行的“黄金窗口”。通过剖析触发器物理本质、时序路径公式及检查方法,解释了Setup违例(数据太慢)和Hold违例(数据太快)如何导致电路“跑飞”,并提供了从RTL优化到物理实现的实战修复策略与协同优化技巧。

weixin_29268267的博客 476

无线图像传输新突破:深度JSCC算法在低带宽环境下的性能实测

本文深入探讨了基于深度学习的信源信道联合编码(JSCC)算法在低带宽无线图像传输中的突破性表现。通过实测数据对比,深度JSCC在低信噪比环境下展现出卓越的鲁棒性,有效对抗传统方案的“悬崖效应”,实现图像质量的平滑下降,为远程医疗、工业巡检等严苛场景提供了新的解决方案。

weixin_29090089的博客 505

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

【OCCT】第3讲 OpenCasCade&VTK实现三维建模Demo

本文分享OpenCasCade&VTK共同实现三维建模Demo,希望对各位小伙伴有所帮助!1. 新建Visual Studio工程新建空项目添加main.cpp添加main函数2. 配置OpenCasCade & VTK 库配置包含路径:配置库文件:添加链接库:添加运行环境:注意:VTK库的版本要与编译OpenCasCade库时选择的版本一致,否则会出错!

qq_40041064的博客 781

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

安防相机宽动态(WDR)技术解析:从原理到实战应用

本文深入解析安防相机宽动态(WDR)技术原理,对比多次曝光与DOL-WDR等实现方式,并区分硬件WDR与数字WDR(DWDR)的本质差异。文章重点阐述了WDR在逆光出入口、夜间道路监控等五大典型场景的实战应用与调参技巧,旨在帮助用户根据实际需求正确选择与配置,确保监控系统在复杂光线下清晰成像。

weixin_29191081的博客 428

【单点登录】SSO单点登录sa-token接入流程详解

Sa-Token 是一个轻量级 Java 权限认证框架,主要解决:登录认证、权限认证、单点登录、OAuth2.0、分布式Session会话、微服务网关鉴权 等一系列权限相关问题。Sa-Token 目前主要五大功能模块:登录认证、权限认证、单点登录、OAuth2.0、微服务鉴权。

Hello, New World! 1789

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

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

swallowblank的博客 267

使用R语言实现循环神经网络RNN进行文本生成

首先,让我们回顾一下循环神经网络(Recurrent Neural Networks,RNN)的基本概念。RNN是一种深度学习技术,特别适合处理序列数据,如时间序列和文本数据。RNN的关键特性是它的隐藏状态,这个状态可以捕捉到当前输入之前的信息。这使得RNN能够利用前面的信息来影响后续的输出,从而对序列数据进行有效的处理。

斌擎科技 725

HDU1542 Atlantis (线段树 + 扫描线)

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

Fau的博客 841

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

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

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

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

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

OOOak 303

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

线段树扫描线 hdu1542 Atlantis

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

beating_spark 281

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

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

code 9792

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

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

hdu 1542 Atlantis 线段树 + 扫描线

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

beyhhhh的博客 419

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 线段树+扫描线

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

462

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

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

shadiao.的博客 436

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
上一篇: 数位DP总结
下一篇: ZOJ 3953 Intervals
DIDCJS
博客等级 码龄11年 5粉丝 31原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值