线段树---HDU2795Billboard
这道题跟第二个题差不多,求单点的最大值。
题目大意:有个高和宽分别为h, w的广告牌, 这个广告牌分成高为 1 的长条, 每条分别能贴长度为wi长度的广告, 输入的n为广告的条数,广告优先贴在最上边和最左边, 让输出每个广告能贴的层数,如果贴不下了,就输出-1
主要思路:
1. 建立线段树,初始化每个节点的值为w, 因为这个每条的宽
2. 读入点,并更新线段树并且还要输出第几层来
代码如下:
#include <cstdio>
#include <algorithm> using namespace std; const int MAX = * ; int sum[MAX];
int h, w, n; void pushUp(int root)
{
sum[root] = max(sum[root * ], sum[root * + ]);
} void buildTree(int root, int left, int right)
{
sum[root] = w;//初始化为w
if(left == right)
return;
int mid = (left + right) / ;
buildTree(root * , left, mid);
buildTree(root * + , mid + , right);
}
//查询并更新
int query(int root, int size, int left, int right)
{
if(left == right)
{
sum[root] -= size;//找到就更新
return left;
}
int mid = (left + right) / ;
int res;
if (sum[root * ] >= size)
res = query(root * , size, left, mid);
else
res = query(root * + , size, mid + , right);
pushUp(root);//把它上面有关的点调整
return res;
} int main()
{
int x;
while(~scanf("%d %d %d", &h, &w, &n))
{
if(h > n)
h = n;
buildTree(, , h);
for(int i = ; i < n; i++)
{
scanf("%d", &x);
if(sum[] < x)//如果根节点都小于了,下面的肯定不能有大于x的了
printf("-1\n");
else
printf("%d\n", query(, x, , h));
}
} return ;
}
线段树---HDU2795Billboard的更多相关文章
- 线段树:HDU2795-Billboard(建树方式比较新奇)
Billboard Time Limit: 20000/8000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Su ...
- hdu2795Billboard(线段树,找第一个大于w的点)
Billboard Time Limit: 20000/8000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- HDU-2795Billboard+对宽度建立线段树
参考: https://blog.csdn.net/qiqi_skystar/article/details/49073309 传送门:http://acm.hdu.edu.cn/showprobl ...
- hdu2795billboard线段树
题目链接:http://icpc.njust.edu.cn/Problem/Hdu/2795/ 题目大意:有一块长方形木板,从上到下被分成h*w的区域,现要将n个长条放进这些区域中,要求从上到下只要后 ...
- bzoj3932--可持久化线段树
题目大意: 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分.超级计算机中的 任务用三元组(Si,Ei,Pi)描述,(Si,Ei,Pi)表示任务从第Si秒开始,在第 ...
- codevs 1082 线段树练习 3(区间维护)
codevs 1082 线段树练习 3 时间限制: 3 s 空间限制: 128000 KB 题目等级 : 大师 Master 题目描述 Description 给你N个数,有两种操作: 1:给区 ...
- codevs 1576 最长上升子序列的线段树优化
题目:codevs 1576 最长严格上升子序列 链接:http://codevs.cn/problem/1576/ 优化的地方是 1到i-1 中最大的 f[j]值,并且A[j]<A[i] .根 ...
- codevs 1080 线段树点修改
先来介绍一下线段树. 线段树是一个把线段,或者说一个区间储存在二叉树中.如图所示的就是一棵线段树,它维护一个区间的和. 蓝色数字的是线段树的节点在数组中的位置,它表示的区间已经在图上标出,它的值就是这 ...
- codevs 1082 线段树区间求和
codevs 1082 线段树练习3 链接:http://codevs.cn/problem/1082/ sumv是维护求和的线段树,addv是标记这歌节点所在区间还需要加上的值. 我的线段树写法在运 ...
随机推荐
- IOS 在Xcode 4.x以上添加静态库
参考网站:http://my.oschina.net/edwardlau/blog/95924 常用的代码可以通过静态库进行抽出来作为公共类方法,方便在其他地方调用,一般来说我们要准备2套静态库,一套 ...
- js 实现分割条
js 实现 切分条效果, 为了熟悉js 写法,纯javascript 脚本编写 简单介绍几个函数: setCapture()函数的作用就是将后续的mouse事件都发送给这个对象, releaseCa ...
- [javascript]事件冒泡处理
<!DOCTYPE html> <html> <head> <style type="text/css"> #box1 { widt ...
- ichartjs-基于html5的图表组件
大家可以到官网学习:ichartjs官网 带你进入官网:
- CSS3圆角详解
一.CSS3圆角的优点 传统的圆角生成方案,必须使用多张图片作为背景图案.CSS3的出现,使得我们再也不必浪费时间去制作这些图片了,而且还有其他多个优点: * 减少维护的工作量.图片文件的生成.更新. ...
- Oracle 游标使用全解(转)
转自:http://www.cnblogs.com/sc-xx/archive/2011/12/03/2275084.html 这个文档几乎包含了oracle游标使用的方方面面,全部通过了测试 -- ...
- linux内核移植 I
根据tx2440的文档, 目标也比较简单, 先编译成功, 再烧录, 根文件系统, busybox 这些. A. 准备 1. 解压tar, 修改根Makefile ARCH ?= arm CROSS_C ...
- 配置linux平台下基于vim的开发环境
一.vim的基本配置 1.配置文件的位置在目录 /etc/ 下面,有个名为vimrc的文件,这是系统中公共的vim配置文件,对所有用户都有效.而在每个用户的主目录($HOME)下,都可以自己建立私有的 ...
- iOS 获取手机 唯一标识-b
存贮在keychainQuery 可以统计用户使用情况 -(void)gatherMessage{ //采集用户设备信息 NSUserDefaults *userDefaults=[NSUserDef ...
- 利用github for windows 工具将本地的内容同步到github上
1 利用github for windows工具来创建一个Repository,名字叫weixin,具体步骤 请参考这篇文章 根据default storage directory的设置 我知道我所创 ...