大意:给一个h*w的格子,然后给出多个1*w的板子往格子里面填,如果有空间尽量往上一行填满,输出行数,无法填补,则输出-1;

可以使用线段树转化问题,将每一排的格子数目放到每一个叶子节点上,然后每有一块板子,进行query查询靠左子树的第一个大于板子的叶子,进行update操作更新叶子。每个节点附权值max叶子节点即可。令一个小坑是h和w的范围是1e9,数组太大。试想如果格子高度h > 板子的个数n,那么我们只需要压缩格子到n个高度即可。所有给叶子节点的存储空间就能压缩成n的范围即1e6。

 1 #include <iostream>
 2 #include <cstring>
 3 #include <cstdlib>
 4 #include <cstdio>
 5 #include <cmath>
 6 #include <cctype>
 7 #include <algorithm>
 8 #include <numeric>
 9 #include <climits>
10 #include <vector>
11 #include <string>
12 using namespace std;
13
14 const int maxn =  200000 + 10;
15 int maxv[maxn << 2];
16
17 void PushUp (int rt) {
18     maxv[rt] = max (maxv[rt * 2], maxv[rt * 2 + 1] );
19 }
20
21 void build (int w, int l, int r, int rt) {
22     maxv[rt] = w;
23     if (l == r) {
24         return ;
25     }
26     int m = (l + r) / 2;
27     build (w, l, m, rt * 2);
28     build (w, m + 1, r, rt * 2 + 1);
29 }
30
31 int query (int x, int l, int r, int rt) {
32     if (r == l) {
33         maxv[rt] -= x;
34         return l;
35     }
36     int m = (l + r) / 2;
37     int ret;
38     if (maxv[rt * 2] >= x) {
39         ret = query (x, l, m, rt * 2);
40     } else {
41         ret = query (x, m + 1, r, rt * 2 + 1);
42     }
43     PushUp(rt);
44     return ret;
45 }
46
47 int main () {
48     int h, w, n;
49
50     while (~scanf ("%d %d %d", &h, &w, &n)) {
51         if (h > n) {
52             h = n;
53         }
54         build (w, 1, h, 1);
55         while (n --) {
56             int x; scanf ("%d", &x);
57             if (maxv[1] < x) {
58                 printf ("%d\n", -1);
59             } else {
60                 printf ("%d\n", query (x, 1, h, 1));
61             }
62         }
63     }
64     return 0;
65 }

转载于:https://www.cnblogs.com/Destiny-Gem/p/3877485.html

【HDU2795】Billboard(线段树)相关推荐

  1. hdu2795 Billboard 线段树

    题意: 给出一块h*w的广告牌,还有n张1*u的海报,海报尽量往上,左边的位置张贴,问每一张海报能贴的多高. 线段树单点修改. 注意:因为1 <= h,w <= 10^9; 1 <= ...

  2. HDU2795 Billboard 线段树

    这是一道简单的线段树,只需要考虑好我们建树的方式即可! 我们以高h来建树,点的权值为W,通过来维护区间的最大值,我们很快就能查找到编号最小的点切大于等于wi..明白之后就是一道简单的线段树单点更新,维 ...

  3. HDU 2795 Billboard (线段树+贪心)

    HDU 2795 Billboard (线段树+贪心) 手动博客搬家:本文发表于20170822 21:30:17, 原地址https://blog.csdn.net/suncongbo/articl ...

  4. HDU - 2795 Billboard(线段树)

    题目链接:点击查看 题目大意:给定一个高度为h,宽度为w的广告牌,接下来以此给出n个高度为1,宽度为w的广告,我们需要将广告优先贴在最上边.最左边,问给出的每一个广告应该贴在哪一行,若没有位置贴了则输 ...

  5. HDU_2795 Billboard(线段树)

    /*题意:输出每次贴上的海报所在的行号,行号为1...h; 开始拿到这题没思路,后来问了问本校的大牛,终于找到思路.这题是按high建树,结构体中定义一个len变量,存放当前该结点的空闲长度.某结点的 ...

  6. 线段树——思维(Codeforces 339D Xenia and Bit Operations/Billboard HDU - 2795)

    Codeforces 339D Xenia and Bit Operations vj地址 题意:给出2的n次方个数,每次将现在这个序列中相邻的两个数运算后合并为一个数,得到一个新的序列,这个新序列的 ...

  7. Billboard(海报粘贴简单的线段树)

    题目来源:[NWPU][2014][TRN][13]线段树第一讲  G 题 http://vjudge.net/contest/view.action?cid=50850#problem/G 作者:n ...

  8. hdu2795 线段树应用:找到线段树中=给定值的第一个元素位置 并 更新该点)

    问题描述 在大学的入口处,有一个巨大的矩形广​​告牌,大小为h * w(h是它的高度,w是它的宽度).董事会是发布所有可能公告的地方:最近的节目比赛,餐厅菜单的变化以及其他重要信息. 9月1日,广告牌 ...

  9. 数据结构---线段树

    线段树 转载请注明出处,谢谢!http://blog.csdn.net/metalseed/article/details/8039326  持续更新中···   一:线段树基本概念 1:概述 线段树 ...

最新文章

  1. Java项目:在线小说阅读系统(读者+作者+管理员)(java+SSM+jsp+mysql+maven)
  2. Java中一个令人惊讶的bug
  3. vue嵌套数据多层级里面的数据不自动更新渲染dom
  4. 浅谈 Linux 高负载的系统化分析
  5. 炫界 (978) -(建工发现应用克隆漏)_除了DMA,这些漏损点检测与漏损区域识别技术你知道么?...
  6. node mysql商城开发_GitHub - Ssipon/nideshop: NideShop:基于Node.js+MySQL开发的开源免费商城(api服务器端)...
  7. ireport 生成一维码 和 二维码 小记
  8. 1133 Splitting A Linked List
  9. WPF 视频教程+笔记
  10. 如何拆分复杂需求的用户故事?这些必杀技GET
  11. U813.0 - 登录系统管理提示“缺少根元素”
  12. 数控铣削图案及编程_数控铣削编程与操作设计有全套图纸.doc
  13. 助你迈向成功之路的二十二个好习惯
  14. MAR位数反映存储单元的个数笔记
  15. 本大三狗处博——为工作消得人憔悴
  16. 北航计算机组成原理课程设计-2020秋 【系列完结】Verilog或ISE高级特性与自动化测试
  17. Go 语言高质量编程
  18. java发邮件的代码
  19. CS信号(片选信号)经常都是低电平有效
  20. IntelliJ Idea -- 自动引包设置

热门文章

  1. Map map = request.getParameterMap(); BeanUtils.populate(bean, map);对前端表单的迅速封装与判断
  2. 一个链表创建、反转、打印的C语言代码
  3. PX4飞控之导航及任务架构
  4. Linux DMA 内存拷贝与memcpy 速率比较
  5. php拉图片 图片变形,请大神帮我看这个图片变形公式
  6. 同一类的不同对象,在调用相同的成员函数时,入口地址是相同的
  7. Linux下.rar文件解压
  8. javascript读写本机文本文件
  9. 如何使用Proxy模式及Java内建的动态代理机制
  10. Pro *C/C++学习笔记