/*题意:输出每次贴上的海报所在的行号,行号为1...h;

开始拿到这题没思路,后来问了问本校的大牛,终于找到思路。这题是按high建树,结构体中定义一个len变量,存放当前该结点的空闲长度。某结点的父结点存放其子结点的最大空闲长度值;

比如(len = 10):

                             1

                        len = max(len2,len3)

                       /       \

                   2                      3

         (len = max(len4,len5))

             /           \              /          \

          4             5             6              7

       (len = 6)        (len = 7)

这样每次更新时,如果父结点的node[t].len < w,则父结点之下的结点都不符合条件,可以跳过。*/

/*My Code:*/

#include <iostream>#include <cstdio>#define L(t) t << 1#define R(t) t << 1 | 1

using namespace std;

const int N = 200005;

struct node{int l, r;int w;}node[N*4];

int w, ans;

void creat(int t, int l, int r){    node[t].l = l;    node[t].r = r;    node[t].w = w;

if(l == r)    return;int mid = (l + r) >> 1;

    creat(L(t), l, mid);    creat(R(t), mid+1, r);}

void updata(int t, int len){if(node[t].l == node[t].r)    {if(node[t].w < len)return;

        node[t].w -= len;        ans = node[t].l;return;    }

if(len <= node[L(t)].w)        updata(L(t), len);

else        updata(R(t), len);

    node[t].w = node[L(t)].w > node[R(t)].w ? node[L(t)].w : node[R(t)].w;}

int main(){//freopen("data.in", "r", stdin);

int h, n, i, b;while(~scanf("%d%d%d", &h, &w, &n))    {if(h > n)    h = n;    //注意这里,如果h>n则n以后的数都更新不到,最大建树建到n就可以。        creat(1, 1, h);for(i = 1; i <= n; i++)        {            scanf("%d", &b);            ans = 0;            updata(1, b);            printf("%d\n", ans ? ans : -1);        }    }return 0;}

  

HDU_2795 Billboard(线段树)相关推荐

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

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

  2. HDU - 2795 Billboard(线段树)

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

  3. hdu2795 Billboard 线段树

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

  4. HDU2795 Billboard 线段树

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

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

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

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

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

  7. 【HDU2795】Billboard(线段树)

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

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

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

  9. 【转】线段树题目 汇总 讲解(by not only success)

    转载自:http://www.notonlysuccess.com/ 非常喜欢他的代码风格以及简洁的思路,感谢notonlysuccess! PS:他的个人网站好像是上不去了-.- 线段树 很早前写的 ...

最新文章

  1. Android Studio: Debug Android SDK Source Code
  2. python测试之道pdf百度云_Python测试之道——笔记1
  3. 【推荐系统算法学习笔记1】基本架构、专有名词、构建流程
  4. php配置mysql集群_【mysql集群】mysql集群配置
  5. 思维认知-读mindhacks杂记
  6. MYISAM表的.frm、MYI损坏,丢失的修复方法
  7. Python使用random实现双色球、大乐透随机选号
  8. 计算机网络 故障处理,浅析计算机网络常见故障处理及维护方法
  9. 区块链入门教程(1)--概述
  10. 5G 理论峰值速率是怎么计算的?
  11. MySQL 文件结构、逻辑架构及 sql 执行流程分析作者:Java后端架构
  12. 一些Pixel手机的使用技巧
  13. html手机怎么刷机,一键刷机,小编教你手机怎么一键刷机
  14. 仿脉脉PHP源码,php,mysql_如何实现类似脉脉网的二维人际关系,php,mysql,算法,社区,社交 - phpStudy...
  15. c语言中signal函数详细解释说明
  16. 从前端到未来,前端发展闲聊
  17. 互联网时代,企业经营管理面临的挑战有哪些?
  18. Day036 《电影院售票系统》项目全码
  19. 【厚积薄发系列】C++项目总结16—单例模式释放时机导致的崩溃问题分析
  20. 12V将路由器网口烧了

热门文章

  1. VTK:Snippets之RestoreSceneFromFile
  2. VTK:网格之MatrixMathFilter
  3. OpenGL starfield星空的实例
  4. OpenGL绘制Triangle三角形
  5. QT的QTechnique类的使用
  6. QT的QQmlComponent类的使用
  7. QT的QListIterator类的使用
  8. C++全局函数做友元
  9. matlab转向梯形优化设计,转向梯形优化设计matlab程序
  10. mysql-8.0.14-winx64,mysql-8.0.15-winx64 解压版安装教程及退出的三种方式