HDU 2795 Billboard(区间求最大值的位置update的操作在query里做了)
Billboard
通过这题,我知道了要活用线段树的思想,而不是拘泥于形式, 就比如这题 显然更新和查询放在一起很简单 但如果分开写 那么我觉得难度会大大增加
【题目链接】Billboard
【题目类型】区间求最大值的位置update的操作在query里做了
&题意:
h*w的木板,放进一些1*L的物品,求每次放空间能容纳且最上边的位子
&题解:
思路:每次找到最大值的位子,然后减去L
线段树功能:query
区间求最大值的位置(直接把update的操作在query里做了)
【时间复杂度】\(O(nlogn)\)
&代码:
#include <bits/stdc++.h>
using namespace std;
const int maxn = 200000 + 9 ;
int h,w,n;
int seg[maxn<<2];
inline void PushUp(int rt)
{
seg[rt]=max(seg[rt<<1],seg[rt<<1|1]);
}
void Build(int b,int e,int rt)
{
if (b==e){
seg[rt]=w;
return;
}
int m=b+e>>1;
Build(b,m,rt<<1);
Build(m+1,e,rt<<1|1);
PushUp(rt);
}
//把更新和查询放在了一起
int Query(int xx,int b,int e,int rt)
{
if (b==e){
seg[rt]-=xx;
return b;
}
int m=b+e>>1;
int re=0;
//这里保证了先从小的序号开始找
if (seg[rt<<1]>=xx)
re=Query(xx,b,m,rt<<1);
else
re=Query(xx,m+1,e,rt<<1|1);
PushUp(rt);
return re;
}
void Solve()
{
while(~scanf("%d%d%d",&h,&w,&n)){
h=min(h,n);
Build(1,h,1);
for(int i=0;i<n;i++){
int t;
scanf("%d",&t);
if (seg[1]<t) puts("-1");
else {
printf("%d\n",Query(t,1,h,1));
}
}
}
}
int main()
{
Solve();
return 0;
}
HDU 2795 Billboard(区间求最大值的位置update的操作在query里做了)的更多相关文章
- [HDU] 2795 Billboard [线段树区间求最值]
Billboard Time Limit: 20000/8000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- HDU 2795 Billboard(宣传栏贴公告,线段树应用)
HDU 2795 Billboard(宣传栏贴公告,线段树应用) ACM 题目地址:HDU 2795 Billboard 题意: 要在h*w宣传栏上贴公告,每条公告的高度都是为1的,并且每条公告都要 ...
- HDU 2795 Billboard (线段树单点更新 && 求区间最值位置)
题意 : 有一块 h * w 的公告板,现在往上面贴 n 张长恒为 1 宽为 wi 的公告,每次贴的地方都是尽量靠左靠上,问你每一张公告将被贴在1~h的哪一行?按照输入顺序给出. 分析 : 这道题说明 ...
- HDU 2795 Billboard 【线段树维护区间最大值&&查询变形】
任意门:http://acm.hdu.edu.cn/showproblem.php?pid=2795 Billboard Time Limit: 20000/8000 MS (Java/Others) ...
- HDU 2795——Billboard——————【单点更新、求最小位置】
Billboard Time Limit:8000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit St ...
- HDU 2795 Billboard(线段树的另类应用)
Billboard Time Limit: 20000/8000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- hdu 2795 Billboard(线段树+单点更新)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2795 Billboard Time Limit: 20000/8000 MS (Java/Others ...
- HDU 2795 Billboard (线段树+贪心)
手动博客搬家:本文发表于20170822 21:30:17, 原地址https://blog.csdn.net/suncongbo/article/details/77488127 URL: http ...
- 线段树区间求最大值(点更新)---I Hate It
HDU 1754 Description 很多学校流行一种比较的习惯.老师们很喜欢询问,从某某到某某当中,分数最高的是多少. 这让很多学生很反感. 不管你喜不喜欢,现在需要你做的是,就是按照老师的 ...
随机推荐
- Json序列化
参考文章 C# 解析json的方法 http://www.cnblogs.com/txw1958/archive/2012/08/01/csharp-json.html
- 第一次用Axure~
刚刚接触axure感觉好多不会呢~但是一步一步来吧~ 操作到后来发现字体的变化很奇怪,总是只有一个字体出现,只有在编辑时才出现我设定的字体. 但最后还是有个样子出来了~做了一个联系的新页面 最后学姐又 ...
- track by
ng-repeat指令中使用track by子语句解决重复数据遍历的错误 <li ng-repat="x in [2, 2]" ng-bind="x"&g ...
- CCI4.5/LintCode Validate Binary Search Tree
Validate BST是指按中序遍历niorder后左<node<右: 第一种方法: 先按inoreder遍历, 再放进ArrayList里用循环看是不是从小到大排序: 注意: 设置成员 ...
- 自动换行(word-wrap:break-word;word-break:break-all)
word-wrap:break-word; 自动换行,不把单词拆开 word-break:break-all; 自动换行,拆开单词 white-space:nowrap; 文本不会换行,文本会在同一行 ...
- CentOS6.5上Oracle11gR2静默安装
一.环境准备环境 操作系统:CentOS release 6.5 (Final) 内核版本:2.6.32-431.el6.x86_64 物理内存:2G(必须大于1G) swap分区:3G(必须大于3G ...
- Codeforces Round #168 (Div. 2)
A. Lights Out 模拟. B. Convex Shape 考虑每个黑色格子作为起点,拐弯次数为0的格子构成十字形,拐弯1次的则是从这些格子出发直走达到的点,显然需要遍历到所有黑色黑色格子. ...
- LeetCode() Binary Tree Level Order Traversal
感觉我这个思路好 先记录上一层有几个节点 /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeN ...
- HA-0302 退役
2016年11月20日 上午12:00许,NOIP2016(复赛)结束. HA-0302正式退役.
- JS 获取地址栏三级域名
<script type="text/javascript"> function Char(str) { var uchars = {}; str.replace(/\ ...