Atlantis HDU - 1542 线段树 扫描线

Procedural modeling What is procedural modeling? One content generation option is modeling buildings, plants, clouds, cities, and worlds using an underlying system of rules. 1 Procedural Modeling: Grammars A rule-based generative system loosely organized as: ... 阅读详情

题解

题目大意 给你n个矩形的左上角坐标和右下角坐标求矩形覆盖面积 坐标为实数

使用线段树+扫描线求解
将矩形分割为上下两条边 记录边的左端点和右端点分别对应矩形的左右侧边 上下边的高度分别对应矩形的上下边 和符号 上为正下为负
将边按照高度从高到低排序处理 每次处理过程中根据符号在线段树中离散化标记覆盖范围并计算覆盖长度 乘上距离下条边的高度差为当前分块的答案贡献 求和即可

AC代码

#include <stdio.h>
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

const int INF = 0x3f3f3f3f;
const int MAXN = 210; //*2
vector<double> dz; //离散化类型为double。。

struct node
{
    int l, r;
    int cnt; //叶节点覆盖次数
    double sum; //区间覆盖长度和
}tre[MAXN * 4];
struct node2
{
    double l, r, h; //横向边
    int f; //状态
    bool operator < (const node2 &oth)
    {
        return h < oth.h;
    }
}a[MAXN];
inline void PushUp(int x)
{
    if (tre[x].cnt) //当前区间被覆盖
        tre[x].sum = dz[tre[x].r + 1] - dz[tre[x].l]; //区间长度
    else if (tre[x].l == tre[x].r) //一个点
        tre[x].sum = 0;
    else
        tre[x].sum = tre[x << 1].sum + tre[x << 1 | 1].sum; //合并左右儿子
}
void Build(int x, int l, int r)
{
    tre[x].l = l, tre[x].r = r, tre[x].cnt = tre[x].sum = 0;
    if (l == r)
        return;
    int m = l + r >> 1;
    Build(x << 1, l, m);
    Build(x << 1 | 1, m + 1, r);
}
void Update(int x, int pl, int pr, int v) //区间更新不用lzay
{
    int l = tre[x].l, r = tre[x].r;
    if (pl <= l && r <= pr)
    {
        tre[x].cnt += v; //加一或者减一
        PushUp(x); //更新一下
    }
    else
    {
        int m = l + r >> 1;
        if (pl <= m)
            Update(x << 1, pl, pr, v);
        if (pr > m)
            Update(x << 1 | 1, pl, pr, v);
        PushUp(x);
    }
}
int Dis(double v)
{
    return lower_bound(dz.begin(), dz.end(), v) - dz.begin();
}
int main()
{
#ifdef LOCAL
	freopen("C:/input.txt", "r", stdin);
#endif
    int N, kase = 1;
    while (cin >> N, N)
    {
        dz.clear();
        dz.push_back(-INF);
        for (int i = 1; i <= N; i++) //将矩形拆分为一正一负两条横向边
        {
            double x1, y1, x2, y2;
            scanf("%lf%lf%lf%lf", &x1, &y1, &x2, &y2);
            a[i * 2 - 1] = { y1, y2, x1, 1 };
            a[i * 2] = { y1, y2, x2, -1 };
            dz.push_back(y1), dz.push_back(y2); //离散化纵坐标
        }
        N *= 2;
        sort(a + 1, a + N + 1); //按照高度从上到下排序
        sort(dz.begin(), dz.end());
        dz.erase(unique(dz.begin(), dz.end()), dz.end());
        Build(1, 1, N);
        double ans = 0.0;
        for (int i = 1; i < N; i++) //从上向下扫描 不扫描最后一个
        {
            Update(1, Dis(a[i].l), Dis(a[i].r) - 1, a[i].f); //更新[l, r)范围
            ans += (a[i + 1].h - a[i].h) * tre[1].sum; //到下一个线段的高度差*整个纵坐标范围的覆盖面积
        }
        printf("Test case #%d\n", kase++);
        printf("Total explored area: %.2f\n\n", ans);
    }

	return 0;
}
SMIC Memory配置与Library Compiler实战:从lib到db的高效转换 本文详细介绍了SMIC Memory Compiler的配置要点与使用Library Compiler将.lib文件高效转换为.db文件的完整流程。文章深入解析了关键配置参数对性能和面积的影响,并提供了从交互式操作到自动化脚本的实战指南,帮助数字芯片设计工程师顺利完成存储器模型的生成与集成,确保Design Compiler能正确调用。 阅读详情

相关推荐

LDA主题模型简介及Python实现

一、LDA主题模型简介 LDA主题模型主要用于推测文档的主题分布,可以将文档集中每篇文档的主题以概率分布的形式给出根据主题进行主题聚类或文本分类。 LDA主题模型不关心文档中单词的顺序,通常使用词袋特征(bag-of-word feature)来代表文档。词袋模型介绍可以参考这篇文章:文本向量化表示——词袋模型 - 知乎 了解LDA模型,我们需要先了解LDA的生成模型,LDA认为一篇文章是怎么形成的呢? LDA模型认为主题可以由一个词汇...

weixin_41168304的博客 20万+

一篇文章搞懂扫描线算法(线段树) HDU1542

怨念 这个专题其实不难,但是翻了一圈网上的博客,写得是云里雾里,有些一上来概念也不解释,直接就讲线段树,有些放个图直接开始糊代码的,真是佛了,打算用一篇博客把这个问题讲得非常明白。 前序知识 能看懂这篇文章需要: 线段树基础知识。 线段树染色问题基本概念。 离散化操作 目标 首先这个扫描线算法解决的是什么问题? 主要解决的是ACM中的 矩形面积问题 矩形周长问题 多边形面积问题 这篇...

小水的博客 9520

个人信息保护合规审计人员(高级)能力考核试卷+面试模拟

《个人信息保护合规审计考试与面试指南》 摘要:本文提供个人信息保护合规审计考试及面试的全面指导。考试采用闭卷笔试形式,满分100分,合格线75分,时长120分钟,包含单选、多选、判断题及综合案例分析题。内容涵盖《个人信息保护法》核心条款、审计程序、风险评估等实务要点。面试环节采用情景模拟方式,重点考察应试者在压力下处理审计独立性、客户关系与监管要求的平衡能力,以及应对数据泄露等突发事件的处置流程。案例题聚焦大型互联网平台的数据收集、共享、跨境传输等高风险环节的合规审计,要求设计完整的审计方案框架。面试评分标

qq_41525079的博客 1146

HDU - 1542 (扫描线+线段树优化)

#include #include #include #include using namespace std; #define lson l,m,rt<<1 #define rson m,r,rt<<1|1 #define INF 1000000100 const int maxn = 210; double ty[maxn]; int kk; int find(double va

playwfun的专栏 672

保姆级教程:用Docker快速部署mpromonet/webrtc-streamer实现WebRTC直播(附常见问题解决)

本文提供了一份详细的Docker部署mpromonet/webrtc-streamer的实战指南,帮助用户快速搭建WebRTC直播服务。内容涵盖从环境准备、基础部署到进阶配置与性能调优的全过程,并针对容器网络、视频流配置、跨网访问等常见问题提供了解决方案,旨在实现低延迟的流媒体传输。

dell8的博客 177

MDK开发篇:基于立创逻辑派FPGA-G1与Cortex-M1软核的按键控制LED实战

本文详细介绍了基于立创逻辑派FPGA-G1开发板与高云Cortex-M1软核的完整开发流程。通过Gowin云源软件配置软核系统与GPIO外设,并在Keil MDK环境中编写按键控制LED的C程序,最终实现程序固化与上电自启动。教程涵盖硬件配置、软件开发、在线调试与固化部署全步骤,帮助STM32开发者快速上手FPGA软核开发。

weixin_42103128的博客 149

[HDU - 1542] Atlantis (线段树+扫描线 模版题)

题目链接:Atlantis 题意 给一些可能有重合部分的矩形组合成不规则图形,求这个不规则形状的面积。 题解 每个矩形都有左右边界,这些边界(x=c)将整个不规则图形划分为一个个区间,我们只需求出区间内不规则图形部分所占用的高,答案就是∑{\sum}∑区间长度*区间高。 在求区间内不规则图形部分所占用的长度时。我们可以将每个矩形左边长度+1,右边长度-1,将所有的矩形的纵坐标点保存离散化成整数,用线段树维护一个个相邻纵坐标区间,保存纵坐标区间内不规则图形占用的长度以及覆盖的次数。 很显然tree[1].le

张小生的先生的博客 285

华为OD机试双机位C卷:补种未成活胡杨 (C/C++/Py/Java/Js/Go)

华为OD机试双机位C卷 补种未成活胡杨,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解。华为OD机试 - 补种未成活胡杨。

qq_45776114的博客 4007

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

Atlantis 题目链接:HDU - 1542 题意:求n个矩形合成图形的面积,如下图是由三个矩形构成,求出所涂颜色区域的面积; 当图形很少时可以暴力求解,S=S红+S紫+S蓝;但是这样是很麻烦的,怎样让他简单化呢? 观察一下上图的墨绿线,这些线很好的将原图划分为五部分,面积就是这五部分和,这就是扫描线; 我们可以把墨绿线看作是由左向右移动的,当他碰到一条边的时候暂停一下,那么第...

Sirius_han的博客 336

具身智能:原理、算法与系统 第18章 模仿学习与人类示范

与基于试错机制的强化学习不同,模仿学习假设存在能够提供高质量轨迹示范的专家策略,学习者的目标是在不直接访问专家内部决策机制的情况下,复现或泛化专家的行为模式。此外,选项 GAIL(Option-GAIL)将分层强化学习与对抗模仿结合,学习选项(Options)级别的策略,能够捕捉专家示范中的多模态行为与高层意图。X-Sim 框架提出从真实到模拟再到真实的迁移路径:首先从人类视频中重建物理仿真环境,在仿真中训练状态级策略,随后通过策略蒸馏获得基于视觉的策略,最后通过在线领域自适应对齐真实与仿真观测。

VectorShift的博客 125

YOLOv11知识蒸馏实战:让小模型拥有大模型90%精度,速度提升3倍的终极教程

在self.alpha = alpha # 蒸馏损失权重self.temperature = temperature # 温度系数,控制分布平滑度# 输出分布蒸馏(KL散度损失)# 中间特征蒸馏(MSE损失,对齐中间层特征)# 总蒸馏损失知识蒸馏是YOLOv11在“小模型高性能部署”场景的“破局之法”——它让小模型能“站在大模型的肩膀上”,兼具速度与精度。从损失函数定义到多阶段训练,再到实战落地,本教程已为你铺就了一条清晰的路径。

m0_64661770的博客 803

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

HDU - 1542 Atlantis 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

00后的博客 295

基于STM32的六足机器人控制系统设计(项目资料ID:27)

六足机器人控制系统综合分析其结构、步态与控制算法,融合云端服务、Wi-Fi、蓝牙、语音识别及手势识别等多种技术,设计了多元化控制模式,并针对不同应用场景提出了差异化的构建方案。系统硬件采用分层设计,分为主控板与舵机控制板:主控板以 STM32F103VET6 为核心,负责各类控制模式的数据处理与状态显示;舵机控制板采用 STM32F103R8T6,专注于舵机角度的精确控制,两板通过串口实现数据交互。

以培养嵌入式工程师为己任 1万+

hdu1542 Atlantis(线段树+扫描线)

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

weixin_44118043的博客 195

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

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的博客 195

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

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

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

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

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【离散化&线段树&扫描线】个人认为很全面的详解

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

swallowblank的博客 267

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(线段树:扫描线)

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

code 9793

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 - 5700 权值线段树 | 树状数组 二分
下一篇: 覆盖的面积 HDU - 1255 线段树 扫描线
CaprYang
博客等级 码龄8年 147粉丝 277原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值