线段树---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是标记这歌节点所在区间还需要加上的值. 我的线段树写法在运 ...
随机推荐
- Spring mvc 中有关 Shiro 1.2.3 配置问题
Spring 版本:3.2.x, 4.0.x [问题说明] 首先介绍下配置出错情况: (1)项目中,Spring3 and Spring4 的 applicationContext.xml aop ...
- 关于jQuery表单校验的应用
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/stri ...
- 在jQuery.getData中renderCallback使用不同创建方式的结果
JavaScript 中需要创建函数的话,有两种方法:函数声明.函数表达式,各自写法如下:// 方法一:函数声明function foo() {}// 方法二:函数表达式var foo = funct ...
- xcode 发展史 及 做iOS 必须知道的小知识
Xcode 3.0 是开发人员建立 Mac OS X 应用程序的最快捷方式,也是利用新的苹果电脑公司技术的最简单的途径.Xcode 3.0 将Mac OS X的轻松使用,UNIX 能量以及高性能的开发 ...
- SAR-303 xml validator验证框架
// 配置文件详解 <mvc:annotation-driven validator="validator" /> <bean id="validato ...
- SQLite for xamarin
原文地址:http://www.codeproject.com/Articles/1097179/SQLite-with-Xamarin-Forms-Step-by-Step-guide SQLite ...
- Local System、Local Service與Network Service
CreateService参数介绍SC_HANDLE CreateService( SC_HANDLE hSCManager, //服务控制管理程序维护的登记数据库的句柄,由系统函数OpenSCMan ...
- BZOJ1264: [AHOI2006]基因匹配Match
1264: [AHOI2006]基因匹配Match Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 541 Solved: 347[Submit][S ...
- BZOJ1782: [Usaco2010 Feb]slowdown 慢慢游
1782: [Usaco2010 Feb]slowdown 慢慢游 Time Limit: 1 Sec Memory Limit: 64 MBSubmit: 541 Solved: 326[Sub ...
- -_-#toFixed
parseFloattoFixed