HDU Billboard
题目分析:给你n张海报,一个宣传板。让你在满足海报能够贴在最高位置的时候则贴的最高,无法满足时贴的最靠左,输出海报所贴的高度。假设不能贴则输出-1.
一道非常easy,可是我没想出的基础线段树。
算法思想:
把宣传板的高度转换成线段树的区间,从而得知每个区间的大小当然为宣传板的宽度啦。然后,每次查询每个区间内的大小是否有满足当前海报宽度的,有责得到结果。然后,在更新减去当前所用的宽度。依据线段是的特点,我们知道我们会先得到小的答案,即,较高的高度(高度从1-h)。
另一个须要处理的就是,当高度超过200000的时候,要截取。由于海报最多才200000,所以不须要那么高的宣传板。
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
using namespace std; #define L(rt) (rt << 1)
#define R(rt) (rt << 1 | 1)
#define MID(a,b) (a+((b-a) >> 1))
#define lson lft,mid,rt << 1
#define rson mid+1,rht,rt << 1 | 1 const int MAXN = 222222; struct Node{
int lft,rht,mx;
int mid(){return MID(lft,rht);};
}; Node tree[MAXN*4];
int w,h,n;
class Segtree{
public:
void Build(int lft,int rht,int rt){
tree[rt].lft = lft;tree[rt].rht = rht;
tree[rt].mx = w;
if(lft != rht){
int mid = tree[rt].mid();
Build(lson);
Build(rson);
}
}
int Update(int rt,int val){
int lft = tree[rt].lft,rht = tree[rt].rht;
if(lft == rht){
tree[rt].mx -= val;
return lft;
}
else{
int pos;
if(tree[L(rt)].mx >= val)pos = Update(L(rt),val);
else pos = Update(R(rt),val);
tree[rt].mx = max(tree[L(rt)].mx,tree[R(rt)].mx);
return pos;
}
}
}; int main()
{
while(~scanf("%d%d%d",&h,&w,&n)){
Segtree seg;
seg.Build(1,min(h,MAXN),1);
for(int i = 0;i < n;++i){
int wid;
scanf("%d",&wid);
if(tree[1].mx < wid)printf("-1\n");
else printf("%d\n",seg.Update(1,wid));
}
}
return 0;
}
HDU Billboard的更多相关文章
- 线段树(维护最大值):HDU Billboard
Billboard Time Limit: 20000/8000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- HDU 2795 Billboard(线段树的另类应用)
Billboard Time Limit: 20000/8000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- hdu 1882 Strange Billboard(位运算+枚举)
http://acm.hdu.edu.cn/showproblem.php?pid=1882 感觉非常不错的一道题. 给一个n*m(1<=n,m<=16)的矩阵,每一个格子都有黑白两面,当 ...
- hdu 2795 Billboard 线段树单点更新
Billboard Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=279 ...
- 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 【线段树维护区间最大值&&查询变形】
任意门:http://acm.hdu.edu.cn/showproblem.php?pid=2795 Billboard Time Limit: 20000/8000 MS (Java/Others) ...
- HDU 2795 Billboard(宣传栏贴公告,线段树应用)
HDU 2795 Billboard(宣传栏贴公告,线段树应用) ACM 题目地址:HDU 2795 Billboard 题意: 要在h*w宣传栏上贴公告,每条公告的高度都是为1的,并且每条公告都要 ...
- Billboard (HDU 2795)
Billboard (HDU 2795) Hdu 2795 注意到每个广告的长度是1,因此可以将每这一张广告牌当成一个数列表示,每个初始值为w.使用线段树维护这个数列,每次查询为找到这个数列第一个大于 ...
随机推荐
- POJ1251 Jungle Roads 【最小生成树Prim】
Jungle Roads Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 19536 Accepted: 8970 Des ...
- UVA 847 - A Multiplication Game(游戏)
UVA 847 - A Multiplication Game 题目链接 题意:一个数一開始是1,每次轮流乘2-9,谁先大于n谁就赢,问谁胜 思路:博弈,找出必胜态.2-9为stan,10-18为ol ...
- 学习json-rpc
最近做一个和SmartHome相关的项目,文档不全不说,连个像样的Demo都没,痛苦!!当然,这是题外话.今天来说说项目中主要用到的通讯协议:json-rpc,简单地说,它是以json格式进行的远程调 ...
- HDU 1988 Cube Stacking (数据结构-并检查集合)
Cube Stacking Time Limit: 2000MS Memory Limit: 30000K Total Submissions: 18834 Accepted: 6535 Ca ...
- 解决win10客户机本地账户登陆导致远程桌面没法访问问题
情景:客户机器如果是win10本地账户,我们远程桌面连接是可能会没法访问. 如果客户机器切换到win10 Microsoft账户登录,远程桌面就可以访问了(当然用户肯定不能给你说自己的Microsof ...
- Redis系列之(二):Redis主从同步,读写分离(转)
1. Redis主从同步 Redis支持主从同步.数据可以从主服务器向任意数量的从服务器上同步,同步使用的是发布/订阅机制. 2. 配置主从同步 Mater Slave的模式,从Slave向Maste ...
- 多于ListView同步滚动
简介: 发展过程中可能遇到的2一个或多个其他listview为了用相应的关系保持滚动的情况下一起,本文演示了这种效应为大家. 功效: 实现原理: 在滚动当中不论什么一个ListView的时候,同一时候 ...
- CIC and Fir 滤波器的级联
在FDATool中 CIC 和 Fir 级联滤波器的设计 1 设计CIC滤波器的幅频特性曲线如下 2.设计FIR 滤波器的幅频特性曲线如下 3.总的特性曲线如下 4.把通带部分放大后的图,比较平坦
- 加州理工大学公开课:机器学习与数据挖掘_线性模型 II(第IX类)
课程简要: 主要内容包括线性分类和回归分析简单的回忆.除了Logistic回归分析,具体解说误差测量和算法三方面,同时归纳法的非线性变换的分析. 课程大纲: 1.Review 2.Nonlinear ...
- 【DataStructure】Some useful methods for arrays
Last night it took me about two hours to learn arrays. For the sake of less time, I did not put emph ...