hdu 2795 Billboard(线段树单点更新)

F5 GTM DNS 实战指南:智能DNS的监控与健康检查机制 本文深入解析F5 BIG-IP GTM智能DNS的核心机制,重点阐述其监控与探针两大功能如何协同工作。监控器负责深度检查服务器应用健康,确保服务可用性;探针则实时测量网络路径质量,实现基于延迟的智能流量调度。文章通过实战配置步骤,指导如何构建逻辑架构、建立iQuery通信、配置业务级健康检查及探针,从而构建高可用、高性能的全局负载均衡解决方案。 阅读详情

Billboard

                                               Time Limit: 20000/8000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 15595    Accepted Submission(s): 6571



Problem Description
At the entrance to the university, there is a huge rectangular billboard of size h*w (h is its height and w is its width). The board is the place where all possible announcements are posted: nearest programming competitions, changes in the dining room menu, and other important information.

On September 1, the billboard was empty. One by one, the announcements started being put on the billboard.

Each announcement is a stripe of paper of unit height. More specifically, the i-th announcement is a rectangle of size 1 * wi.

When someone puts a new announcement on the billboard, she would always choose the topmost possible position for the announcement. Among all possible topmost positions she would always choose the leftmost one.

If there is no valid location for a new announcement, it is not put on the billboard (that's why some programming contests have no participants from this university).

Given the sizes of the billboard and the announcements, your task is to find the numbers of rows in which the announcements are placed.
 

Input
There are multiple cases (no more than 40 cases).

The first line of the input file contains three integer numbers, h, w, and n (1 <= h,w <= 10^9; 1 <= n <= 200,000) - the dimensions of the billboard and the number of announcements.

Each of the next n lines contains an integer number wi (1 <= wi <= 10^9) - the width of i-th announcement.
 

Output
For each announcement (in the order they are given in the input file) output one number - the number of the row in which this announcement is placed. Rows are numbered from 1 to h, starting with the top row. If an announcement can't be put on the billboard, output "-1" for this announcement.
 

Sample Input
  
3 5 5 2 4 3 3 3
 

Sample Output
  
1 2 1 3 -1
 

Author
hhanger@zju
 

Source

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2795

题目大意:每张广告都是高度为1宽度为w的细长的矩形纸条。贴广告的人总是会优先选择最上面的位置来帖,而且在所有最上面的可能位置中,他会选择最左面的位置,而且不能把已经贴好的广告盖住。 如果没有合适的位置了,那么这张广告就不会被贴了。

 现在已知广告牌的尺寸和每张广告的尺寸,求每张广告被贴在的行编号。

解题思路:线段树单点更新。要特别注意h和n的关系,h是广告牌的高度,即线段树的容量,但n上界远远小于h,如果容量直接取h会RE,因此容量应取n和h的较小值。初始化所有节点为w,即每行能贴纸条的宽度。取区间最大值,即该高度区间里能贴纸条的最大宽度,如果该区间最大值小于当前纸条宽度,则不必再访问该区间。

代码如下:
#include <cstdio>
#include <cstring>
#include <algorithm>
#define ll long long
using namespace std;
int const maxn=800005;
int tr[maxn];
int h,w,p;
void Query(int l,int r,int x,int root)
{
	if(l==r)  //线段树的结构特点就是单点从前往后的,即高度是从上往下的
	{
		if(tr[root]-x>=0)   //此行可以贴纸条,更新单点
		{
			tr[root]-=x;
			printf("%d\n",l);
			p=1;           //标记已贴过纸条
		}
		return ;
	}
	int mid=(l+r)/2;
	if(!p&&x<=tr[root*2])
		Query(l,mid,x,root*2);
	if(!p&&x<=tr[root*2+1])
		Query(mid+1,r,x,root*2+1);
	tr[root]=max(tr[root*2+1],tr[root*2]);
}
int main(void)
{
	int x,n;
	while(scanf("%d%d%d",&h,&w,&n)!=EOF)
	{
		h=h>n?n:h;  //不加这句会RE
		for(int i=0;i<maxn;i++)
			tr[i]=w;
		for(int i=0;i<n;i++)
		{
			p=0;
			scanf("%d",&x);
			if(tr[1]<x)
				printf("-1\n");
			else
				Query(1,h,x,1);
		}
	}
}




【UML】-- 期末试题题库含答案(各章题目、选择题、填空题、简答题、画图题) 每章都有对应的题目和答案,选择题,填空简答,大题,答案已标红,方便大家观看 阅读详情

相关推荐

GAN实战:用Python和TensorFlow打造你的第一个生成对抗网络(附完整代码)

本文是一份详细的GAN实战指南,指导读者使用Python和TensorFlow框架从零开始构建并训练一个生成对抗网络。文章涵盖了环境搭建、MNIST数据预处理、生成器与判别器模型构建、对抗性损失函数定义、训练循环编写以及关键的调试技巧,旨在帮助开发者通过动手实践深入理解GAN的核心原理与实现过程。

php55的博客 479

HDU 2795 Billboard【线段树好题,单点更新】

题意:有个公告板,大小为h*w,要贴n张公告,每个公告的长度是k,高度固定为1,公告放的要尽可能靠上并尽可能靠左,依次给出一张公告,要求这个公告在满足要求的情况下放在了第几层。 思路:按照线段树的做法的话,因为公告的高度固定为1,可以对公告板的高度进行线段花费,将其现在的宽度值存起来,然后每次遍历从左子树开始往下走,知道走到叶子节点满足要求即可。 一般人很难想到用线段树解决,中间也有好多细节要注意,详见代码。 参考博客:http://blog.youkuaiyun.com/libin56842/article/deta

AC_Dreameng 1512

Cadence SpectreRF仿真避坑指南:PSS和Pnoise设置详解(附实战案例)

本文详细解析了Cadence SpectreRF中PSS(周期稳态分析)和Pnoise(周期噪声分析)的关键设置技巧,帮助模拟IC设计工程师避开常见仿真陷阱。通过实战案例分享,涵盖引擎选择、Beat Frequency计算、噪声类型配置等核心参数优化策略,提升仿真精度与效率。特别针对开关电容电路和振荡器等复杂场景提供专业解决方案。

weixin_42613501的博客 601

HDU2795 Billboard 线段树 单点更新

Problem DescriptionAt the entrance to the university, there is a huge rectangular billboard of size h*w (h is its height and w is its width). The board is the place where all possible announcements are

Bill_Utada的成长之路 1503

保姆级教程:用Code Blocks搞定中科蓝讯AB5768E蓝牙音响SDK开发环境(附资源包)

本文提供了一份详细的Code Blocks配置指南,帮助开发者快速搭建中科蓝讯AB5768E蓝牙音响SDK开发环境。从工具链安装、环境配置到工程导入和调试技巧,涵盖全流程避坑要点,特别适合K12开发板初学者。附资源包下载,助您高效完成蓝牙音响开发。

weixin_28692817的博客 447

Unity工业数据可视化:基于ModbusTCP的实时数据通信实战

本文详细介绍了在Unity中实现工业数据可视化的核心方法,重点讲解了基于ModbusTCP协议与PLC等工业设备进行实时数据通信的实战流程。内容涵盖NModbus库的集成、Modbus Slave模拟器的使用、TCP连接的建立与多线程安全通信、数据读写与解析,以及如何将实时数据驱动3D场景,为构建工业数字孪生与监控系统提供完整解决方案。

ol7890123的博客 553

hdu 2795 Billboard 线段树单点更新

Billboard Time Limit: 1 SecMemory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=2795 Description At the entrance to th...

weixin_30399871的博客 153

EndNoteX9完整详细安装教程

EndNoteX9完整详细安装教程

rothschild666的博客 10万+

hdu2795 Billboard(线段树,单点更新)

关键在于建树更新,能想到如何建树如何查找的话,这就是一道水题,想不到的话就是一道难题。一共最多有n个宣传板,所以我们可以建一个线段树,它的叶子节点依次从1到n;这样每次查找能否放下的时候,从左儿子开始查找,看左儿子所在区间的最大值是否能放下当前的木板,能放下的话更新放下后区间的值,不能放下的话从右儿子查找,递归下去就可以了; #include #include #include #include

Hard。 331

小众但实用:Python爬取钉钉/企业微信消息,实现办公数据自动化采集(完整版)

钉钉/企业微信的办公数据自动化采集,属于「小众但极度实用」的Python技巧——它不像爬虫爬取电商/网页数据那样被广泛关注,但能直接解决职场人的「刚需痛点」,把每天1-2小时的手动数据整理工作,变成「一键自动化完成」。这套技巧的核心价值,不在于「技术有多高深」,而在于「能真正落地、能真正提升效率」—— 几行简单的Python代码,就能解放双手,让你从繁琐的重复工作中解脱出来,专注于更有价值的核心工作。更重要的是:所有的技术和代码,都是基于「合规合法」的前提,守住了技术的底线,也守住了职场的原则。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1928

【用unity实现100个游戏之15】开发一个类保卫萝卜的Unity2D塔防游戏1(附项目源码)

当今,塔防游戏已经成为游戏市场上备受欢迎的一类游戏类型。《保卫萝卜》作为其中的经典之作,深受玩家喜爱。本项目旨在基于《保卫萝卜》的玩法和特点,开发一个Unity2D塔防游戏,让玩家可以在游戏中体验到精彩的策略对抗与刺激的关卡挑战。本项目将通过Unity引擎进行开发,利用2D游戏开发相关技术,包括但不限于精灵动画、碰撞检测、UI界面设计等。我们将实现萝卜作为关键角色的防守任务,并设计各种怪物和防御塔,使得游戏具有多样的战术策略和游戏乐趣。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 4922

HDU 2795 Billboard // 线段树 单点更新

题目描述HDU 2795 Billboard解题思路题目大意: 有一张h×w的矩形告示栏, 和 n 张 1×wi 的海报 海报每次张贴的位置为告示栏剩余位置的左上角. 要求支持下列操作: 1) 对于每张海报 输出其在告示栏的第几行 (若放不下, 则输出 -1)首先我们知道的是 告示栏上的海报最多只有n张, 即告示栏的行数最多只有n行有效 所以当输入的h大于n时, 令h = n 即可.

FZU_zyt的专栏_(:з」∠)_ 380

[VCS]VCS dump fsdb的精细化控制

本文介绍了VCS FSDB波形dump的精细化控制方法。主要内容包括:1)基本dump方式;2)通过$fsdbDumpoff排除特定层次;3)使用$fsdbDumpvars选择性dump指定模块;4)运行时动态控制dump开关;5)通过文件管理排除列表($fsdbDumpoffFile或自定义读取);6)层次控制策略(剪除整棵树或仅当前层)。这些方法可有效控制波形文件大小,提高仿真效率。

元直的博客 1033

HDU 2795 Billboard (线段树单点更新)

Billboard Time Limit: 20000/8000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 29637    Accepted Submission(s): 11993   Problem Description At the entrance to t...

pxlsdz的博客 636

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

假人有限元模型

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

HDU 2795 Billboard 线段树单点更新

题目意思大概就是在高h,宽w的板上贴n张海报(1 #include #include #define maxn 200000+10 using namespace std; //因为贴海报都是从最左开始的,所以每行的可贴大小只要大于海报宽度就可以贴,所以只需要单点更新就好 //因为要是海报的宽度大于每行的宽度无论也贴不上去,所以n张海报最多占用的行数就是n,所以线段树最大的容量只需要n

terry_sdy的博客 369

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

HDU 2795 Billboard(线段树单点更新)

题意: h*w的木板, 放进一些1*L的物品, 求每次放的可以放的最上面的位置, 放了之后就占据相应的位置 思路: 维护1-h线段的线段树 每段长w 然后不断维护区间的最大值  查询的时候优先往左儿子(相当于向上)           然后就是单点更新的裸题了 代码: // // Created by TaoSama on 2015-09-18 // Copyright (c) 201

TaoSama's Microcosm 409

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

HDU2795 Billboard 线段树单点更新变形

题目链接:点击打开链接 题目大意:有一个h×w的广告牌和n条1×wi的通知,每条通知总是尽可能的往上同时又尽可能往左贴在广告牌上,找出每条通知在广告牌上我位置高度,如果不能贴在广告牌上,位置高度为-1. #include #include #include using namespace std; #define maxn 200005 int num[maxn<<2];

AC_Gibson的专栏 612

HDU2795 Billboard 【线段树】+【单点更新】

Billboard Time Limit: 20000/8000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 9632    Accepted Submission(s): 4286 Problem Description At the entrance

长风的专栏 1087

HDU 2795 Billboard (线段树单点更新)

题意:有一块大小h*w的公告牌,可以在上面贴广告,每张广告大小为1*wi,优先贴在高处,左边,如果可以贴,输出贴在了第几排,否则输出-1 思路:线段树记录的是某个区间能张贴的最长广告长度,更新同时查询,可以张贴时:在l == r 的位置更新最底层的值,然后向上更新时取左右子区间的最大值 #include #include #define lson l, m, rt * 2 #def

cookiesMonster 353

hdu2795 Billboard (线段树,单点更新)

题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=2795 题意: 有一个高为h,宽为w的billboard,有n个广告,每个广告高1,宽为wi,将n个广告从上往下放,并且尽可能放满一行,问n个广告分别放在哪一行。 思路: 线段树,这里可以一边查询一边更新,每个树节点存对应区间中所能放的广告长度的最值,初始化为w,那么

酱油拌面 342

hdu 2795 Billboard (巧妙单点更新的线段树)

B - Billboard 

Maple丶峰 220

hdu 2795 Billboard(线段树单点最大值更新)

/* 本题的题意: 给定一个广告栏, 高为h 宽为 w 现在给出k个高为1 宽度为l的告示 告示只能从最高处以及最左边开始粘贴, 现在需要求出每张告示在广告栏第几行进行粘贴。 (最高处为第一行) 本题思路: 暴力超时的思想, 设定一个一维数组,长度为h ,里面的值为w, 每输入一个l,就从左到右扫描一次 代码,观察数组的容量是否足够 容纳具体的值 本题可以利用线段树思想, ...

qq_41698081的博客 338

HDU-2795-Billboard-线段树单点更新

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2795 好吧,写了这么多单点更新的题目,这样的就很简单了,不过我第一次用这样的风格写代码;向这种简短风格靠齐; 不过题目给的数据感觉还挺坑的,还好我机智的看了Discuss。。。。哈哈,仰天长笑。。。。 #include #include #include #include #include #i

wlxsq的专栏 1183

HDU—2795—Billboard—【数据结构】【线段树】【单点更新】

Billboard Time Limit: 20000/8000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 12249    Accepted Submission(s): 5380 Problem Description At the entranc

ACer-TomatoFish 455

hdu2795 Billboard 线段树单点更新区间最值

Billboard Time Limit: 20000/8000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 17336    Accepted Submission(s): 7318 Problem Description At the entranc

EventQueue的博客 460
上一篇: hdu 1166 敌兵布阵 (线段树单点更新)
下一篇: hdu 1698 Just a Hook (线段树区间更新裸题)
雨狮子
博客等级 码龄12年 24粉丝 185原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值