hdu2795 Billboard

题意:h*w的木板,放进一些1*L的物品,求每次放空间能容纳且最上边的位子

思路:每次找到最大值的位子,然后减去L

线段树功能:query:区间求最大值的位子(直接把update的操作在query里做了)

题意:有一块长方形h*w的广告板,往上面贴广告,然后给n个1*wi的广告,要求把广告贴上去,如果前面的行可以贴,就要贴前面的并且要靠左贴,前面的贴不下就贴在下面,

广告的高度是wi,如果能贴在上面输出最小的高度,如果不能就输出-1。

解题思路:如果以行数为区间,建立线段树,他给的h有10^9次,是创不了10^9这么大的数组的。然而我们知道给定N个广告,应为宽度一定,那么最高也不会超过N;所以我们就建 n个节点的线段树
而n<=20W

样例:

Sample Input
3 5 5
2
4
3
3
3
 
Sample Output
1
2
1
3
-1
 

AC代码

#include <cstdio>
#define lson l , m , rt << 1
#define rson m + 1 , r , rt << 1 | 1
const int maxn = 200005;
int h,w,n;
struct Tree{
int value;
}tree[maxn<<2]; int max(int va,int vb){
return va>vb?va:vb;
} void PushUP(int rt) {
tree[rt].value = max( tree[rt<<1].value, tree[rt<<1|1].value );
}
void build(int l,int r,int rt) {
tree[rt].value=w; //初始化
if (l == r) {
return ;
}
int m = (l + r) >> 1;
build(lson);
build(rson);
//PushUP(rt); 这题初始化w 没必要这步了
}
/*
void update(int x,int p,int l,int r,int rt) {//p表示要进行操作的人是第几个
if (l == r) {
tree[rt].value -=x;
return ;
}
int m = (l + r) >> 1;
if (p <= m) update(x , p , lson);
else update(x , p , rson);
PushUP(rt); //这步需要,
}
*/
int query(int x,int l,int r,int rt) {
if (l == r) {
//update(x,r,1,h,1);
tree[rt].value -= x;
return r; }
int m = (l + r) >> 1;
int ret = 0 ;
if (x <= tree[rt<<1].value) ret= query(x , lson); //先取左
else ret= query(x , rson); PushUP(rt); //往上更新
return ret;
}
int main() {
while (~scanf("%d%d%d",&h,&w,&n)) {
if (h > n) h = n; //比较重要的一步
build(1 , h , 1);
while (n --) {
int x;
scanf("%d",&x);
if (tree[1].value<x) printf("-1\n");
else printf("%d\n",query(x , 1 , h , 1));
}
}
return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

线段树-hdu2795 Billboard(贴海报)的更多相关文章

  1. poj 2528(线段树+离散化) 市长的海报

    http://poj.org/problem?id=2528 题目大意是市长竞选要贴海报,给出墙的长度和依次张贴的海报的长度区间(参考题目给的图),问最后你能看见的海报有几张 就是有的先贴的海报可能会 ...

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

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

  3. hdu2795(Billboard)线段树

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

  4. 【HDU2795】Billboard(线段树)

    大意:给一个h*w的格子,然后给出多个1*w的板子往格子里面填,如果有空间尽量往上一行填满,输出行数,无法填补,则输出-1: 可以使用线段树转化问题,将每一排的格子数目放到每一个叶子节点上,然后每有一 ...

  5. 【线段树求最靠前】【HDU2795】【Billboard】

    题意: 有一个H*W的广告牌,当插入一个广告时(1*Wi),问最靠前的插入方式是什么 新生赛有个类似的题目,可惜当时居然没水过去. 果断用线段树做 以H为线段 建树,存[l,r]中最大的宽度,因为区间 ...

  6. HDU2795 billboard【转化为线段树。】

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2795 hhanger大神的题目,水题都得有点思维. 题意:h*w的木板,放进一些1*L的物品,求每次放 ...

  7. hdu2795 Billboard(线段树)

    题意:h*w的木板,放进一些1*L的物品,求每次放空间能容纳且最上边的位子思路:每次找到最大值的位子,然后减去L线段树功能:query:区间求最大值的位子(直接把update的操作在query里做了) ...

  8. hdu2795 线段树 贴广告

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

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

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

随机推荐

  1. Node.js——fs模块(文件系统),创建、删除目录(文件),读取写入文件流

    /* 1. fs.stat 检测是文件还是目录(目录 文件是否存在) 2. fs.mkdir 创建目录 (创建之前先判断是否存在) 3. fs.writeFile 写入文件(文件不存在就创建,但不能创 ...

  2. Linux 判断系统任务是否正在运行

    #!/bin/bash if ps -ef|grep "php index"|egrep -v grep >/dev/null then >& >> ...

  3. 大数据学习--day13(字符串String--源码分析--JVM内存分析)

    字符串String--源码分析--JVM内存分析 String 类的对象 , 是不可变的字符串对象呢 这个不可变很重要,之后要讲的intern()也离不开它的不可变性. https://www.cnb ...

  4. Mysql修改密码以及权限问题

    mysql修改密码小步骤 错误分析: 一开始是密码错误导致,先添加skip-grant-tables(这个配置无视权限的,添加直接回车登录即可),尽心修改密码,发现错误照旧 百度了一下,发现是mysq ...

  5. 单片机中不带字库LCD液晶屏显示少量汉字

    单片机中不带字库LCD液晶屏如何显示少量汉字,一般显示汉字的方法有1.使用带字库的LCD屏,2.通过SD 卡或者外挂spi flash存中文字库,3.直接将需要的汉字取模存入mcu的flash中. 第 ...

  6. Java程序设计 第16周 课堂实践 —— 数据库4

    Java程序设计 第16周 课堂实践 -- 数据库4 课堂实践任务4 查询world数据库,查询哪个国家的平均寿命最长. 代码分析 实现查询数据库需要我们修改Message.java,MessageD ...

  7. week14课上测试

    说明 本次测试老师将所有课下测试的易错题全部重新考察了一遍,虽然是第二次做,还提前复习过,还是错了很多,回到寝室发现老师还没有结束测试,43分的我又忍不住再做了一遍. 做第二遍发现了有几个题目是蓝墨云 ...

  8. 20155331 《Java程序设计》实验一(Java开发环境的熟悉)实验报告

    20155331 <Java程序设计>实验一(Java开发环境的熟悉)实验报告 一.实验内容及步骤 使用JDK编译.运行简单的java程序 实验目的与要求: 使用JDK和IDE编译.运行简 ...

  9. sql语句-3-聚合数据查询

  10. Nginx入门篇(三)之虚拟主机配置

    一.虚拟主机概念 所谓虚拟主机,在Web服务当中就是一个独立的网站站点,这个站点对应独立的域名(也有可能是IP或者端口),具有独立的程序和资源目录,可以独立地对外提供服务供用户访问. 这个独立的站点在 ...