uva1232 - SKYLINE 线段树

SDA 还是 SDI:SAP HANA 数据虚拟化与数据集成的取舍、组合与实战 结论先放在前面:SDA 面向数据虚拟化与联邦查询,强调不落地、不复制、按需实时访问;SDI 面向数据集成与复制,强调抽取、转换、装载与近实时增量同步。两者共享 Remote Source 与 Adapter 的理念,但侧重点与运行时组件明显不同。 阅读详情

The skyline of Singapore as viewed from the Marina Promenade (shown on the left) is one of the iconic scenes of Singapore. Country X would also like to create an iconic skyline, and it has put up a call for proposals. Each submitted proposal is a description of a proposed skyline and one of the metrics that country X will use to evaluate a proposed skyline is the amount of overlap in the proposed sky-line.

\epsfbox{p4108a.eps}

As the assistant to the chair of the skyline evaluation committee, you have been tasked with determining the amount of overlap in each proposal. Each proposal is a sequence of buildings, $ \langle$b1, b2,..., bn$ \rangle$, where a building is specified by its left and right endpoint and its height. The buildings are specified in back to front order, in other words a building which appears later in the sequence appears in front of a building which appears earlier in the sequence.

The skyline formed by the first k buildings is the union of the rectangles of the first k buildings (see Figure 4). The overlap of a building, bi, is defined as the total horizontal length of the parts of bi, whose height is greater than or equal to the skyline behind it. This is equivalent to the total horizontal length of parts of the skyline behind bi which has a height that is less than or equal to hi, where hi is the height of building bi. You may assume that initially the skyline has height zero everywhere.

Input 

The input consists of a line containing the number c of datasets, followed by c datasets, followed by a line containing the number `0'.

The first line of each dataset consists of a single positive integer, n (0 < n < 100000), which is the number of buildings in the proposal. The following n lines of each dataset each contains a description of a single building. The i-th line is a description of building bi. Each building bi is described by three positive integers, separated by spaces, namely, li, ri and hi, where li and rj (0 < li < ri$ \le$100000) represents the left and right end point of the building and hi represents the height of the building.

\epsfbox{p4108b.eps}

Output 

The output consists of one line for each dataset. The c-th line contains one single integer, representing the amount of overlap in the proposal for dataset c. You may assume that the amount of overlap for each dataset is at most 2000000.


Note:In this test case, the overlap of building b1, b2 and b3 are 6, 4 and 4 respectively. Figure 4 shows how to compute the overlap of building b3. The grey area represents the skyline formed by b1 and b2 and the black rectangle represents b3. As shown in the figure, the length of the skyline covered by b3 is from position 3 to position 5 and from position 11 to position 13, therefore the overlap of b3 is 4.

Sample Input 

1 
3 
5 11 3 
1 10 1 
3 13 2 
0

Sample Output 

14

  按顺序建房子,给出房子的左右坐标和高度,每个房子的覆盖度为它建的时候覆盖区间最高(相等也算)的区间长度。求总覆盖度。

  用懒惰标记,设minv[o],maxv[o],setv[o]分别为经过以o节点为根的树内的操作o区间范围内的最小值,最大值和置值。查询时候就算[L,R]在[ql,qr]区间内也必须要height>=maxv[o]或者L==R的时候才能把区间置值然后return,因为如果全部覆盖了才能set,否则就要把set往下推一层,然后继续递归,维护节点信息。

#include<cstdio>
#include<algorithm>
#include<iostream>
#include<sstream>
#include<cstring>
#include<queue>
#include<map>
#include<set>
#include<stack>
#define INF 0x3f3f3f3f
#define MAXN 100010
#define MAXM 35
#define MAXNODE 4*MAXN
#define eps 1e-9
#define pi 4*atan(1.0)
#define pii pair<int,int>
using namespace std;
int T,N,ql,qr,height,ans,minv[MAXNODE],maxv[MAXNODE],setv[MAXNODE],l[MAXN],r[MAXN],h[MAXN];
void maintain(int o,int L,int R){
    int lc=(o<<1),rc=(o<<1|1);
    if(L<R){
        minv[o]=min(minv[lc],minv[rc]);
        maxv[o]=max(maxv[lc],maxv[rc]);
    }
    if(setv[o]!=-1) minv[o]=maxv[o]=setv[o];
}
void pushdown(int o){
    if(setv[o]!=-1){
        int lc=(o<<1),rc=(o<<1|1);
        setv[lc]=setv[rc]=setv[o];
        setv[o]=-1;
    }
}
void update(int o,int L,int R){
    if(height<minv[o]) return;
    if(ql<=L&&qr>=R){
        if(height>=maxv[o]){
            setv[o]=maxv[o]=minv[o]=height;
            ans+=R-L+1;
            return;
        }
        if(L==R) return;
    }
    pushdown(o);
    int mid=(L+R)/2,lc=(o<<1),rc=(o<<1|1);
    if(ql<=mid) update(lc,L,mid);
    else maintain(lc,L,mid);
    if(qr>mid) update(rc,mid+1,R);
    else maintain(rc,mid+1,R);
    maintain(o,L,R);
}
int main(){
    freopen("in.txt","r",stdin);
    while(scanf("%d",&T)!=EOF,T){
        while(T--){
            memset(setv,-1,sizeof(setv));
            memset(minv,0,sizeof(minv));
            memset(maxv,0,sizeof(maxv));
            setv[1]=0;
            scanf("%d",&N);
            int MINL=INF,MAXR=-1;
            for(int i=0;i<N;i++){
                scanf("%d%d%d",&l[i],&r[i],&h[i]);
                MINL=min(MINL,l[i]);
                MAXR=max(MAXR,r[i]);
            }
            ans=0;
            for(int i=0;i<N;i++){
                ql=l[i]+1;
                qr=r[i];
                height=h[i];
                update(1,MINL,MAXR);
            }
            printf("%d\n",ans);
        }
    }
    return 0;
}



【Unity3D框架】GameFramework框架完全教程《全网最全》-专栏文章目录 最近准备学习框架,了解到GameFramework框架是国产Unity3D框架,准备学习一下,但是奈何全网关于这个框架的教程实在太少。为了让自己学习方便一些,也为了让后来者乘凉。将框架以自己的理解整理目录,并且补全教程。觉得教程有帮助别忘了一键三连哦。 阅读详情

相关推荐

图像去雾常见数据集

上述数据集涵盖了室内、室外、真实和合成等多种场景,可以满足不同研究需求。在选择数据集时,建议根据具体任务的应用场景和目标选择合适的数据集,例如真实雾天图像适合模型的实际应用验证,而合成数据则适合模型的快速迭代和训练。希望本文能为从事图像去雾研究的朋友提供一些帮助!

m0_68604571的博客 6334

UVa 1232 SKYLINE (线段树区间修改)

题目链接:http://vjudge.net/problem/UVA-1232      大意:有一个序列,开始时全为零。现有一些操作,将区间[l,r)上小于等于c的数全部改为c,求总修改次数。      思路:很容易想到考查的是线段树区间修改,怎么做呢,其实只要对线段树模板的边界代码稍微修改下即可。在进行更新时,如果待更新区间覆盖了当前区间,那么这个当前区间有三种情况:还未进

Interstellar_的博客 1088

Python结合海康威视工业相机SDK实现高效图像采集与处理

本文详细介绍了如何使用Python结合海康威视工业相机SDK实现高效的图像采集与处理。内容涵盖从环境搭建、SDK核心模块理解,到完整的图像采集流程拆解,包括设备枚举、参数设置、主动取流以及关键的像素格式转换。同时,文章深入探讨了触发模式、参数控制等高级应用,并提供了性能优化建议和可复用的相机操作类封装,帮助开发者快速构建稳定的机器视觉应用。

weixin_29043895的博客 349

UVA 1232 -SKYLINE(线段树)

#include&lt;iostream&gt; #include&lt;stdio.h&gt; #include&lt;string.h&gt; using namespace std;/* 题意是要在[L,R]区间盖一个高为H的大楼。 如果盖楼之前在[L,R]区间上有楼房的高度&lt;H,则要重新盖。 最终求要重新盖的楼层的高度。 */int t,n,l,r,h; const int maxn...

Virtualllll的博客 393

【python】geopandas库安装出现各种问题?可以看看这篇文章

geopandas的安装方法

jgsecurity的博客 3887

用Docker-Compose三节点部署生产级Doris集群:从配置文件到故障转移

本文详细介绍了如何使用Docker-Compose部署一个生产级的三节点Apache Doris集群。内容涵盖从核心架构理解、配置文件编写到集群初始化验证的全过程,并重点讲解了如何实现高可用、数据持久化、健康检查以及故障转移等生产级运维关键点,为中小团队提供了一种在容器化便利性与系统稳定性间取得平衡的可靠部署方案。

kkk56的博客 856

uva 1232 - SKYLINE(线段树)

题目链接:uva 1232 - SKYLINE 题目大意:就是n次修改维护最大值,如果一个位置的最大值被修改了,覆盖值就+1,问说总的覆盖值。 解题思路:线段树的区间修改,每次修改后返回修改到的区间长度即可。 #include #include #include using namespace std; const int maxn = 100000; #define lso

不慌不忙、不急不躁 1799

第01章 Hermes Agent 是什么

如果读者所在的开发团队已经引入了 Cursor、Claude Code 这类 AI IDE,可能会有一个困惑:写代码已经有 AI 帮忙了,还需要 Hermes Agent 做什么?这一章将给出答案。Hermes Agent 不是另一个写代码的 AI,而是一个常驻在团队里的"AI 协作成员",专门负责写代码之外的协作环节——讨论需求、审查代码、查日志、监控告警、生成报告。学完本章,读者将清楚 Hermes 的定位以及它在团队里的角色。

亢少军的博客 75

UVA - 1232 SKYLINE (线段树)

题意:现在要建n(n&lt;1e5)个建筑,每个建筑都有相应的长宽高,用l、r、h表示(l,r&lt;1e5 h&lt;1e9)。这n个建筑是要按给定顺序建立的,求 每个建筑刚建完时 这个建筑的高度 是 已经建完的所有建筑高度中 最高高度 的长度 的和。思路:线段树。维护区间最大h。做一个标记flag记录此处是否有建筑。然后根据不同情况处理。注意向上更新和向下更新时的修改。一个点l表示区间[l,l...

LSD20164388的博客 374

OpenClaw 报错 TypeError: Cannot read properties of undefined (reading ‘prototype‘):Node.js 版本不兼容

国产化环境中部署OpenClaw云边协同平台时,出现"TypeError: Cannot read properties of undefined (reading 'prototype')"报错。经分析发现根本原因是Node.js版本与依赖生态不兼容,新版本Node(如v21)移除了旧依赖使用的内部API。解决方案包括:1)使用nvm切换至兼容的Node 16/18 LTS版本;2)容器化部署固定Node版本;3)遵循官方推荐的引擎版本范围。该问题揭示现代工程中版本管理的重要性,

博客 2313

Python经典编程习题100例:第25例:求各个阶乘的和

不要自卑,去提升实力 互联网行业谁技术牛谁是爹 如果文章可以带给你能量,那是最好的事!请相信自己 加油o~ 本人初学Python,只为熟悉语法编写,大神请勿理会 点击下面链接 Python经典编程100例习题汇总 题目描述: 求1+2!+3!+…+20!的和。 解题思路: > 调用math模块中的factorial函数 代码: import math sum=0 for i in range(1,21): sum+=math.factorial(i) print(sum) ..

优快云 精品推荐 2735

uva - 1232

#include #include #include #include #include using namespace std; #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 #define INF 1000001000 const int maxn = 111111; int MAX[maxn<<2],col[maxn<<2]

playwfun的专栏 626

手把手教你完成YOLOv11分类识别界面搭建,使用Qt6设计YOLOv11分类识别系统,前台系统+后台管理系统开发实战,全网最详细教程

本项目结合YOLOv11分类识别算法和PySide6框架,开发了一套图形化分类识别系统。系统支持图片、视频和摄像头实时分类检测,并具备完善的用户管理功能,包括登录验证、个人信息修改等模块。最新版本新增了管理员后台管理系统,包含用户管理、权限控制等功能。系统采用MySQL数据库存储用户数据,界面设计采用QtDesigner完成,实现了高效的目标分类与友好的交互体验。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 1050

UVA 1232 - SKYLINE(线段树)

UVA 1232 - SKYLINE 题目链接 题意:按顺序建房,在一条线段上,每个房子一个高度,要求出每间房子建上去后的轮廓线 思路:线段树延迟更新,一个setv作为高度的懒标记,此外还要在开一个cover表示当前结点一下是否都为同一高度 代码: #include #include #include using namespace std; #define

Remilia's 1494

Statistics and Machine Learning Toolbox

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

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

UVA1232 - SKYLINE(线段树区间修改)

UVA1232 - SKYLINE(线段树区间修改) 题目链接 题目大意:按照顺序盖楼,如果这个位置(当前要盖的楼覆盖范围内)要新建的楼的高度>=之前就有的最大高度,那么就+1.最后输出这个+1的总数。 解题思路:线段树区间修改值,并且每次修改的时候返回修改的位置总数。因为可能左右子树的高度会有不同,所以这里加入一个sign来表示左右这一段是否高度一致。 代码: #inc

1427

计算机控制技术及应用

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

SKYLINE UVa 1232 线段树区间修改

        题目大意是,每个建筑有左右端点和高度这三个数值,按顺序计算建筑的轮廓线长度。如果当前的建筑,在某一区间内的轮廓线高度比其之前所有建筑的轮廓线高度要高,那么这一区间长度是它的轮廓线长度的一部分。        第一次学习线段树区间修改,没有拿到模板题而是直接拿到了变式,就当做自己的模板题了。学习了队长的写法,模板和找到的一些题解都不一样,但我觉得很好理解,结构易懂,但是就不知道如何转...

xuzonghao的博客 257

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

UVA 1232 - SKYLINE(线段树区间更新)

题目链接:点击打开链接 题意:依次建n个建筑, 每个建筑有3个信息,宽度:[l, r], 和高度h, 要求求出每个建筑刚建完时最高的部分的区间长度之和。 思路:就是维护线段树区间最值, 然而有一个问题, 因为不能更新比当前高度大的区间,所以最坏的情况下要更新到所有点, 因此要加一个懒惰标记,表示该区间是否被完全覆盖,覆盖值是多少。  另外由于是区间问题, 会产生区间端点的麻烦, 所以我们把线段

AC_Arthur的专栏 1748

【UVA】1232 - SKYLINE(线段树减枝)

注意中间的减枝,还需要用一个tr[i]记录结点的值,用col[i]记录结点区间是否被全覆盖。 #include #include #include using namespace std; const int maxn = 111111; const int maxd = 100001; #define lson pos<<1 #define rson pos<<1|1 int col[maxn

花月阁 1159

UVA 1232 Skyline (线段树)

水题,但是被一个区间有多个高度不同的楼的判断卡了好久,之前脑子不够清晰,没想清楚,其实很简单。#include #include #include #include using namespace std; const int maxn=100000+5; int l,r,v; struct Interval{ int setv[maxn*4],minv[maxn*4]; void

qq_33901573的博客 290

uva1232 - SKYLINE

分块、多维问题

ACoder 271

UVA1232,LA4108,Skyline,线段树

The skyline of Singapore as viewed from the Marina Promenade (shown on the left) is one of the iconic scenes of Singapore. Country X would also like to create an iconic skyline, and it has put up a ca

SCUT_Pein 1479

uva1232 la4108 skyline (线段树区间更新,维护最值)

原题链接 十分明显的一道线段树裸题,但是细节操作比较多,卡了1小时,0.0蒟蒻表示很难受。 根本的解决方法就是线段树的区间更新和维护最值。看了其他大神的博客有的还维护的了一个区间最小值来优化时间,但是仔细一想其实不必要。记录maxv[]和col[](懒惰标记)即可。 详细代码: #include #include #include #include

wzgcrc的博客 385

UVA1232 - SKYLINE(段树部分的变化)

UVA1232 - SKYLINE(线段树区间改动) 题目链接 题目大意:依照顺序盖楼。假设这个位置(当前要盖的楼覆盖范围内)要新建的楼的高度&gt;=之前就有的最大高度,那么就+1.最后输出这个+1的总数。 解题思路:线段树区间改动值,而且每次改动的时候返回改动的位置总数。由于可能左右子树的高度会有不同。所以这里增加一个sign来表示左右这一段是否高度一致。 ...

weixin_34067980的博客 97

UVa:1232 SKYLINE

线段树维护区间最值和区间替换。 1。设setv,maxv,minv分别表示区间替换值和区间最大值和最小值。在找到目标的区间后,如果setv大于当前区间最大值,说明该区间都可以,ans+=L-R+1,同时更新该区间,注意这里maxv和minv都要改成setv。如果setv小于当前区间最小值,那就没有必要更新了,就中断update。其他情况就继续下传。 2。结点信息下传的时候,minv要取该段区间

Fighting 915

UVA1232 SKYLINE

【代码】UVA1232 SKYLINE。

qq_73361455的博客 133

UVA 1232 - SKYLINE

题意:求区间1-100000的最大覆盖度,如果新的建筑物在一段区间[a,b]的h >= 原来此区间的最大高度,则 ans += b - a + 1;求ans; 线段树 思路:每个结点保存的信息:此结点及此结点孩子们结点的最小高度minh,最大高度maxh,标记值set    区间修改 解法:对于每个新加的建筑物

c337134154的专栏 896
上一篇: uva11732 - strcmp() Anyone? 前缀树
下一篇: AC自动机
小小小小葱
博客等级 码龄14年 22粉丝 266原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值