#include<iostream>
#include<cstdio>
#include<algorithm>
#define Max 1005
using namespace std;
struct line{
double x, y1, y2;
int flag;
}x_line[Max];
struct node{
int l, r, flag;
double x, f;
}tree[Max];
double point[Max];
int n, m, xm;
int cmp(double a,double b)
{
return a<b;
}
bool comp(line a,line b)
{
return a.x<b.x;
}
void Build(int l,int r,int k)
{
int m;
tree[k].l = l;
tree[k].r = r;
tree[k].flag = 0;
tree[k].x = 0.0;
tree[k].f = 0.0;
if(l+1 == r) return;
m = (l+r)>>1;
Build(l,m,k+k);
Build(m,r,k+k+1);
}
void Myscanf()
{
m = 1;
double x1,x2,y1,y2;
scanf("%d",&n);
for(int i=0; i<n; i++)
{
scanf("%lf%lf%lf%lf",&x1,&y1,&x2,&y2);
point[m] = y1;
x_line[m].x = x1;
x_line[m].y1 = y1;
x_line[m].flag = 1;
x_line[m++].y2 = y2;
point[m] = y2;
x_line[m].x = x2;
x_line[m].y1 = y1;
x_line[m].flag = -1;
x_line[m++].y2 = y2;
}
}
void Point_Do()
{
int mi = 0;
sort(point+1,point+m,cmp);
sort(x_line+1,x_line+m,comp);
xm = m;
for(int i=1; i<m; i++)
{
if(point[i]!=point[mi]) point[++mi] = point[i]; //去重
}
m = mi;
}
int Bin(int xi)
{
int l = 1, r = m;
int mi;
while(l<=r)
{
mi = (l+r)>>1;
if(xi = point[mi]) return mi;
if(xi > point[mi]) l = mi+1;
else r = mi-1;
}
return -1;
}
void update(int l, int r, int k, line cur)
{
if(l==r-1)
{
if(tree[k].flag+cur.flag == 2) tree[k].f = cur.x;
else if(tree[k].flag+cur.flag<2 && cur.flag==-1){
tree[k].x += cur.x - tree[k].f;
tree[k].f = 0.0;
}
return;
}
int mi = (tree[k].l+tree[k].r)>>1;
if(l>mi) update(l,r,k+k+1,cur);
else if(r<=mi) update(l,r,k+k,cur);
else{
update(l,mi,k+k,cur);
update(mi+1,r,k+k+1,cur);
}
return;
}
double query(int k)
{
if(tree[k].l+1==tree[k].r) return (point[tree[k].l]-point[tree[k].r])*tree[k].x;
return query(k+k)+query(k+k+1);
}
int Ans()
{
for(int i=1;i<=xm;i++)
{
int x = Bin(x_line[i].y1);
int y = Bin(x_line[i].y2);
update(x,y,1,x_line[i]);
}
}
int main()
{
Myscanf();
Point_Do();
Build(1,n,1);
Ans();
printf("%lf\n",query);
return 0;
}
Code From Hdu 1542相关推荐
扫描线算法:从矩形面积并到二维空间问题的高效解法
在计算几何和图形学中,处理二维平面上的空间覆盖与查询是常见需求。其核心原理是将复杂的二维静态问题,通过引入一条虚拟的扫描线,转化为一维的动态序列问题来处理。这种事件驱动和区间维护的思想,能将许多O(n²)复杂度的问题优化至O(n log n),极大地提升了算法效率,具有重要的技术价值。它广泛应用于图形渲染、碰撞检测、地理信息系统和VLSI设计等领域。本文以计算多个矩形覆盖总面积为切入点,深入剖析了扫描线算法的核心思想,并提供了基于std::map和线段树两种数据结构的C++实现,详细探讨了其性能差异与优化方
青春野狼不做姐控偶像的梦 - 线段树 - 扫描线 - 单调栈
题目大意:给你一个排列,多次询问,每次给你一个区间,问有多少子区间,数字取出来sort一遍是连续的一段。 题解: 考虑l=1,r=n咋做。 考虑一段合法,当且仅当max-min=r-l。 那么用个单调栈预处理每个数字在哪些[l,r]会成为最大/最小值,然后扫描线维护max-min+l的最小值,显然由于[r,r]是答案所以能取到最小值的位置都一定是答案。 考虑整个问题,就是每次在所有最小值的位置+1...
缺失的区间:范围合并与处理那些实战套路
本文介绍了区间处理的常见问题和实用解决方案。主要包括区间合并、查找缺失区间、区间集合运算(并/交/差)等典型场景。核心方法是先排序再贪心扫描,时间复杂度为O(n log n)。文章详细讲解了每种情形的处理思路,特别强调了端点约定和相邻区间合并等工程实践要点,并提供了完整的Python代码实现,包含合并、找缺口、求交集和差集等功能函数。适用于日程管理、IP地址块处理等需要区间运算的实际应用场景。
线段树+扫描线算法学习笔记
在求重叠矩形总周长或总面积时,可以用扫描线。一般要开一个结构体LINE,记两端的线段。
GIS国土工具实战:从地类分析到坐标转换,一站式解决项目难题
本文详细介绍了GIS国土工具在国土整治项目中的高效应用,涵盖地类分析、坐标转换、影像加载等核心功能。通过实战案例展示如何利用该工具快速处理shp与txt文件转换、智能比对三调二调数据,以及优化影像加载策略,显著提升项目效率。特别适合需要处理复杂国土数据的专业人员使用。
COMSOL仿真避坑指南:列管反应器模拟中多孔介质与化学反应设置的5个常见错误
本文详细解析了COMSOL仿真中列管反应器模拟的5个常见错误,包括多孔介质模型选择、化学反应接口配置、对流扩散方程处理、薄层热阻设置及网格独立性验证。特别针对多孔介质与化学反应设置的误区,提供了实用的判断标准和修正方法,帮助工程师避免计算偏差,提升仿真精度。
Hopping Rabbit---牛客
HHopping Rabbit 题意: 草原上(看成二维坐标系)有n个矩形形状的陷阱,一只兔子在草原上蹦来蹦去。如果兔子在(x,y)(x,y),它跳一次后在(x+d,y),(x-d,y),(x,y+d),(x,y-d)四个点中的一个。问在坐标系中是否存在一个点使兔子无论怎么跳都不会掉进陷阱 。 思路: 把整个草原切分成若干块边长为d的正方形,兔子在每一个正方形上只有一个落脚点(这里要分类讨论,一个陷阱被切分成了多少块)。所以可以把所有的陷阱矩形都看做是在坐标轴的[0,d−1]×[0,d−1]位...
命令行驱动视频剪辑:cutcli与AI自动化工作流实战
在视频内容创作领域,自动化与批量化处理是提升生产效率的关键。传统图形界面工具在应对重复性任务时往往效率低下,而通过命令行接口(CLI)驱动视频生成,则能实现流程的程序化控制。其技术原理在于将视频结构抽象为可编程的指令序列,通过解析命令生成标准化的工程文件。这种模式的核心价值在于将视频制作从手动操作转变为代码驱动,特别适合与AI编程助手集成,实现自然语言到视频草稿的自动转换。应用场景广泛覆盖社交媒体内容批量生产、教育视频自动化生成、数据可视化视频组装等领域。本文以cutcli工具为例,深入解析如何通过命令行与
P1502 窗口的星星
Link lydp221 思路 一开始没考虑在边界的情况。。不知道为什么ac了。。。 1.矩形边界上的星星不算,可以采用把所有星星向左、下各平移0.5距离(因为坐标都是整数),在此基础上,不妨假设圈住星星的矩形顶点坐标都是整数。 2.对扫描线排序的时候,除了以 xxx 为第一关键字升序之外,还需要以 vvv 为第二关键字降序。 代码 struct Segment { ll up, down, x; ll v; Segment(ll l=0, ll r=0, ll h=0,ll v =
AG16K MCU ARM Cortex M3
其中,Input文件为Keil生成的mcu程序文件,输出为合成后的存储格式Bin文件,Program address 为上方表格中“程序运行 RAM 地址(4bytes)”,即 Keil 中设置的程序运行地址。其中 MCU 程序的地址,根据 mcu.ip 中设置的 FLASH_BIAS 进行设置。AG16K MCU 的 FPGA 工程中,需调用 alta_mcu_m3 的硬核 IP,包含在 alta_sim.v 的库文。Quartus II。//MCU 程序在 FLASH 中存放的首地址。
攻克Windows平台3DGS复现:从环境配置到可视化实战全记录
本文详细记录了在Windows平台成功复现3D Gaussian Splatting(3DGS)的完整流程,涵盖从环境配置、依赖安装、数据准备到模型训练与可视化的全步骤。重点解决了Windows下CUDA版本匹配、Visual Studio编译及SIBR_viewers可视化工具部署等核心难题,为开发者提供了一份详实的避坑指南与实战手册。
线段树 (Segment Tree) 完全指南
线段树(Segment Tree)是一种对线性空间的"二进制拆分"思想。如果说前缀和是利用了加法的逆运算,那么线段树就是利用了结合律的终极武器。 线段树的本质是分治法(Divide and Conquer)在空间上的持久化。 结合律意味着计算顺序可以被改变,从而允许我们将线性的计算重组为树形结构。如果直接操作不满足结合律(如"求众数"),就需要构造更复杂的信息结构使其满足(如摩尔投票法的合并)。所有的线段树高级技巧(Level 1-6),本质上都是在寻找或构造这个结合律。
从 Claude Code 到 SAP ADT,vibing-steampunk 把 ABAP 开发带进 Agentic 工程现场
vibing-steampunk(vsp)是一个连接SAP ADT API与AI编码代理的桥梁工具,通过MCP协议实现ABAP开发的自动化。它绕开传统GUI脚本方式,直接利用ADT REST API进行代码读写、调试和部署。该工具提供包分析、边界检查、LUW分析等功能,并创新性地采用Hyperfocused模式和方法级编辑来优化token使用效率。通过上下文压缩技术,vsp能智能提取关键代码片段,显著提升AI处理ABAP代码的精准度,为SAP系统现代化改造提供了高效的技术路径。
Segment Tree——线段树入门
线段树是一种基于分治思想的二叉树结构,用于在区间上进行统计。每个节点代表一个区间,对于每个内部节点[l,r](编号p),左子节点代表区间[l,mid](编号p2),右子节点代表区间[mid+1,r](编号p2+1).可以用结构体数组保存一棵线段树,数组大小开到N*4 P2068 统计和 定义线段树 struct segment_tree { int l,r; long long sum; }tree[100010*4]; 建树 void build(int p,int l,int r) { tre
Hermes Agent 彩蛋大盘点:藏在终端里的浪漫
本文主要介绍了Hermes Agent 彩蛋大盘点:藏在终端里的浪漫,希望能对使用Hermes Agent的同学们有所帮助。 文章目录 1. 前言 2. Spinner 动画 3. Kawaii 表情 4. 思考动词 THINKING_VERBS 5. 皮肤主题 6. 启动 Banner 7. 工具 Emoji 8. 内置人格 9. SOUL.md —— Agent 的灵魂 10. BOOT.md —— 启动自动执行 11. 随机 Tips 12. 统计总览
VC中sqlite的使用
在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示
LG P9844 [ICPC 2021 Nanjing R] Paimon Segment Tree Solution
LG P9844 Solution
ET2012新版免狗免安装绿色软件
ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,
线段树(Segment Tree)
应用场景线段树类型区间和/最值 + 单点修改基础线段树区间和/最值 + 区间修改懒标记线段树值域大、操作少动态开点线段树区间第k小、历史版本主席树矩形面积并、周长并扫描线 + 线段树区间最值操作(chmin/chmax)吉司机线段树线段树是竞赛中最灵活的数据结构之一,掌握其核心思想(分治、懒标记)后,可以根据题目需求自由变形。
Devexpress16.2.6破解工具
Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具
OV9734 DATASHEET,完整规格书
OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等
扫描线算法与线段树:高效解决矩形奇偶覆盖面积问题
在计算几何与算法竞赛中,处理二维平面上的矩形覆盖统计问题是一个经典挑战。其核心原理是通过扫描线算法将二维问题降维,转化为对一维区间的动态维护。线段树作为一种高效的数据结构,能够支持区间修改与快速查询,是实现这一过程的关键技术。结合离散化技术处理大范围坐标,该组合方案能将时间复杂度优化至O(N log N),有效解决了暴力枚举法在坐标范围大、矩形数量多时的性能瓶颈。这一技术方案在算法竞赛(如蓝桥杯国赛)和工程实践中(如传感器网络覆盖分析、图形学区域填充)有重要应用,尤其适用于需要统计被奇数个矩形覆盖的区域面积
坐标系旋转 + 扫描线(一个长宽固定的矩阵最多覆盖多少点)
坐标系旋转
算法数据结构——线段树(Segment Tree)精讲及python实现
算法数据结构——线段树(Segment Tree)精讲及python实现
线段树(Segment Tree)在Python中的高效实现与应用场景解析
本文深入解析了线段树(Segment Tree)这一高效处理区间操作的数据结构。通过Python代码示例,详细讲解了其构建、单点更新、区间查询的核心原理,并重点剖析了实现高效区间修改的关键技术——懒惰标记(Lazy Propagation)。文章结合具体应用场景,阐述了线段树在解决区间求和、最值查询等问题上的优势与适用边界,为开发者处理海量数据区间操作提供了实用指南。
Handbook of Data Structures and Applications学习: Range, and Interval, Segment, Priority S Search Tr
假设你在做一个会议室预约系统。每个预约是一个时间区间(比如9:00-10:30)。 你需要高效回答这些问题: 暴力方法: 对每个查询遍历所有预约 → O(n)O(n)O(n),太慢。 本章介绍的四种数据结构可以将这些查询加速到 O(logn)O(\log n)O(logn) 级别。 二、核心概念:等轴矩形与矩形相交图 2.1 等轴矩形(Iso-Oriented Rectangles) 2.2 矩形相交图与最大团 矩形相交图: 每个矩形是一个顶点,如果两个矩形相交则连一条边。 2.3 一维情况:区间图与密
HDU1542 Atlantis(扫描线+矩形面积并+线段树)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1542 题意:给出一些矩形,求面积并。 从左到右扫描,纵坐标排序后,按数组下标建树,插入纵线段端点再映射到原数,别的就没什么了。 参考代码: #include #include #include #include #include #include using namespace std
【数据结构系列】线段树(Segment Tree)
【数据结构系列】线段树(Segment Tree)
2.线段求交
几何算法,线段求交
409



被折叠的 条评论
为什么被折叠?



