传送门

结点中的l和r表示层数,maxx表示这层最多还剩下多少宽度。根据公告的宽度取找到可以放的那一层

找到后返回层数,并修改maxx

 #include<bits/stdc++.h>
using namespace std;
const int maxn= +;
int h,w;
int ans;
struct Node
{
int l,r,maxx;//l和r是层数,maxx是每层还有多少空位
} node[maxn<<];
void PushUp(int k)
{
node[k].maxx=max(node[k<<].maxx,node[k<<|].maxx);
}
void BuildTree(int l,int r,int k)
{
node[k].l=l;
node[k].r=r;
node[k].maxx=w;
//因为初始是每个节点的最大值均为w
//所以可以省去PushUp(k);
if(l==r)
{
return;
}
int mid=(l+r)>>;
BuildTree(l,mid,k<<);
BuildTree(mid+,r,k<<|);
//PushUp(k);
}
void UpdateTree(int i,int x)
{
if(node[i].l==node[i].r)
{
node[i].maxx-=x;
ans=node[i].l;
return;
}
if(x<=node[i<<].maxx)
UpdateTree(i<<,x);//往左边找,左边层数比较低(因为他要尽量放在最上面)
else
UpdateTree(i<<|,x);
PushUp(i);
}
int main()
{
int n;
while(cin>>h>>w>>n)
{
if(h>n)
h=n;
//根据题意,因为最多放n个公告,
//占用的最大高度也只有n,优化建树的高度
BuildTree(,h,);
int x;
while(n--)
{
ans=-;
scanf("%d",&x);
if(node[].maxx>=x)
UpdateTree(,x);//每次都从第一层开始找
printf("%d\n",ans);
}
}
return ;
}

hdu2795 Billboard(线段树单点修改)的更多相关文章

  1. Ocean的礼物(线段树单点修改)

    题目链接:http://oj.ismdeep.com/contest/Problem?id=1284&pid=0 A: Ocean的礼物 Time Limit: 5 s      Memory ...

  2. hdu 2795 Billboard 线段树单点更新

    Billboard Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=279 ...

  3. POJ 3321 Apple Tree(DFS序+线段树单点修改区间查询)

    Apple Tree Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 25904   Accepted: 7682 Descr ...

  4. HDU - 1754 线段树-单点修改+询问区间最大值

    这个也是线段树的经验问题,待修改的,动态询问区间的最大值,只需要每次更新的时候,去把利用子节点的信息进行修改即可以. 注意更新的时候区间的选择,需要对区间进行二分. #include<iostr ...

  5. HDU 1166 敌兵布阵 <线段树 单点修改 区间查询>

    敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  6. 校内模拟赛T5:连续的“包含”子串长度( nekameleoni?) —— 线段树单点修改,区间查询 + 尺取法合并

    nekameleoni 区间查询和修改 给定N,K,M(N个整数序列,范围1~K,M次查询或修改) 如果是修改,则输入三个数,第一个数为1代表修改,第二个数为将N个数中第i个数做修改,第三个数为修改成 ...

  7. HDU-------(2795)Billboard(线段树区间更新)

    Billboard Time Limit: 20000/8000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  8. HDU - 1166 敌兵布阵 方法一:(线段树+单点修改,区间查询和) 方法二:利用树状数组

    C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视这些工兵营地的活动情况.由于 ...

  9. hdu2795(Billboard)线段树

    Billboard Time Limit: 20000/8000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

随机推荐

  1. 字典 & 列表表达式 结合

    题: 思路: 要求的结果是小字典里面的两个值组成的列表,所以只要抓到小字典,这个题就可以用列表推导式直接表达了.所 以把小字典设为元素d,然后用d在列表里面遍历,列表呢,是大字典的一个值. 答案:  

  2. app数据加密方法

    由于项目涉及到注册和登录,所以我了解一下现在app使用比较广泛的几种密码加密方法,可以当作参考,以下都是在python3.5的环境下使用这些算法的例子. 1.base64 Base64是一种基于64个 ...

  3. bootstrap-multiselect样式修改

    问题 bootstrap-multiselect是一款相当不错的bootstrap风格下拉框组件,但是它的某些样式我不是很喜欢,按钮文本和下拉符号 “” 都是居中的,且下拉列表的宽度也没有跟随变动. ...

  4. linux下如何实现mysql数据库每天自动备份定时备份

    版权声明:本文为 testcs_dn(微wx笑) 原创文章,非商用自由转载-保持署名-注明出处,谢谢.   目录(?)[+]   概述   备份是容灾的基础,是指为防止系统出现操作失误或系统故障导致数 ...

  5. 1864. [ZJOI2006]三色二叉树【树形DP】

    Description Input 仅有一行,不超过500000个字符,表示一个二叉树序列. Output 输出文件也只有一行,包含两个数,依次表示最多和最少有多少个点能够被染成绿色. Sample ...

  6. HBase学习之路 (七)HBase 原理

    系统架构 错误图解 这张图是有一个错误点:应该是每一个 RegionServer 就只有一个 HLog,而不是一个 Region 有一个 HLog. 正确图解 从HBase的架构图上可以看出,HBas ...

  7. 4、JVM-虚拟机性能监控与故障处理工具

    前言: Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的“高墙”,墙外面的人想进去,墙里面的人却想出来. 4.1.概述 给一个系统定位问题的时候,知识.经验是关键基础,数据是依据,工具是 ...

  8. jenkins 构建触发器 Poll SCM 和 Build periodically区别

    Poll SCM:定时检查源码变更(根据SCM软件的版本号),如果有更新就checkout最新code下来,然后执行构建动作.我的配置如下: */5 * * * * (每5分钟检查一次源码变化) Bu ...

  9. Angular动态表单生成(八)

    动态表单生成之拖拽生成表单(下) 我们的动态表单,最终要实现的效果与Form.io的在线生成表单的效果类似,可以参考它的demo地址:https://codepen.io/travist/full/x ...

  10. sql函数:开窗函数简介

    与聚合函数一样,开窗函数也是对行集组进行聚合计算,但是普通聚合函数每组只能返回一个值,而开窗函数可以每组返回多个值. 实验一比如我们想查询每个工资小于5000元的员工信息(城市以及年龄),并且在每行中 ...