Billboard (HDU 2795)

Hdu 2795

注意到每个广告的长度是1,因此可以将每这一张广告牌当成一个数列表示,每个初始值为w。使用线段树维护这个数列,每次查询为找到这个数列第一个大于等于x的位置,每次修改操作为将找到的位置值-x

线段树功能:区间查询+单点更新

  1. #include <cstdio>
  2. #include <utility>
  3. #include <queue>
  4. #include <cstring>
  5. #define scan(x) scanf("%d",&x)
  6. #define scan2(x,y) scanf("%d%d",&x,&y)
  7. #define lson rt<<1,l,mid
  8. #define rson rt<<1|1,mid+1,r
  9. #define root 1,1,h
  10. using namespace std;
  11. const int Max=2e5+10;
  12. int sum[Max<<2];
  13. int h,w,n;
  14. void Pushup(int rt)
  15. {
  16. sum[rt]=max(sum[rt<<1],sum[rt<<1|1]);
  17. }
  18. void Build(int rt,int l,int r)
  19. {
  20. if(l==r)
  21. {
  22. sum[rt]=w;
  23. return;
  24. }
  25. int mid=(l+r)>>1;
  26. Build(lson);
  27. Build(rson);
  28. Pushup(rt);
  29. }
  30. int Query(int x,int rt,int l,int r)
  31. {
  32. if(l==r)
  33. {
  34. sum[rt]-=x;
  35. return l;
  36. }
  37. int mid=(l+r)>>1,ret;
  38. if(sum[rt<<1]>=x) ret=Query(x,lson);
  39. else ret=Query(x,rson);
  40. Pushup(rt);
  41. return ret;
  42. }
  43. int main()
  44. {
  45. while(~scanf("%d%d%d",&h,&w,&n))
  46. {
  47. if(h>n) h=n;
  48. Build(root);
  49. int x;
  50. for(int i=0;i<n;i++)
  51. {
  52. scan(x);
  53. if(sum[1]<x) printf("-1\n");
  54. else
  55. {
  56. printf("%d\n",Query(x,root));
  57. }
  58. }
  59. }
  60. return 0;
  61. }

Billboard (HDU 2795)的更多相关文章

  1. Billboard HDU 2795 (线段树)

    题目链接 Problem Description At the entrance to the university, there is a huge rectangular billboard of ...

  2. Billboard HDU - 2795(树状数组,单点修改,区间查询)

    题目链接:https://vjudge.net/problem/HDU-2795 思路:h = 1e9行不通,因为广告是1*w的,所以n个广告最多只需要 h = n的高度,那么h=2e5就可以接受了. ...

  3. HDU 2795 Billboard(线段树的另类应用)

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

  4. HDU 2795——Billboard——————【单点更新、求最小位置】

    Billboard Time Limit:8000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit St ...

  5. HDU 2795 Billboard(宣传栏贴公告,线段树应用)

    HDU 2795 Billboard(宣传栏贴公告,线段树应用) ACM 题目地址:HDU 2795 Billboard 题意:  要在h*w宣传栏上贴公告,每条公告的高度都是为1的,并且每条公告都要 ...

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

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

  7. hdu 2795 Billboard(线段树+单点更新)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2795 Billboard Time Limit: 20000/8000 MS (Java/Others ...

  8. HDU 2795 Billboard 【线段树维护区间最大值&&查询变形】

    任意门:http://acm.hdu.edu.cn/showproblem.php?pid=2795 Billboard Time Limit: 20000/8000 MS (Java/Others) ...

  9. HDU 2795:Billboard(线段树)

    http://acm.hdu.edu.cn/showproblem.php?pid=2795 Billboard Problem Description   At the entrance to th ...

随机推荐

  1. POJ3528 HDU3662 三维凸包模板

    POJ3528 HDU3662 第一道题 给定若干点 求凸包的表面积,第二题 给定若干点就凸包的面数. 简单说一下三维凸包的求法,首先对于4个点假设不共面,确定了唯一四面体,对于一个新的点,若它不在四 ...

  2. cubism.js

    Cubism.js 是时间序列化的一个D3插件,使用Cubism构建更好的实时指示板,从Graphite,Cube 和其他的资源中拉拉取数据.在GitHub的Apache License上可以获取Cu ...

  3. 【高德地图API】SDK v1.1.1 在代码中设置Map中心点Center级别不起作用

    有时候你在初始化地图时不是直接在xaml中设置Map的Center,而是在cs代码中设置Center或者设置SetZoomAndCenter改变中心点和缩放级别.你可能会发现,不起作用. 这边提出的解 ...

  4. 13.Ext.extend用法以及代码解读

    转自:http://www.blogjava.net/dragonshrimp/archive/2008/03/01/183060.html Ext.extend用法以及代码解读 概述 Ext.ext ...

  5. Ubuntu下 VirtualBox的卸载和升级 (转载)

    转载:http://blog.csdn.net/li_hai/article/details/8164744 首先,在终端查看已经安装的VirtualBox的版本: $ dpkg -l 查看到版本号, ...

  6. E2017614-hm

     pluck   n. 勇气,精神; 内脏; 快而猛的拉; 〈俚〉不及格;   vt. 拔掉; 采,摘; 鼓起(勇气等); 弹(乐器);  scope  n. (处理.研究事务的) 范围; 眼界,见识 ...

  7. bzoj 3733: [Pa2013]Iloczyn【dfs】

    参考:http://www.cnblogs.com/clrs97/p/5125976.html 瞎搞约数失败...滚去搜索 dfs(x,y,z) 表示当前可选第x到第m个约数,还要选y个约数,已有z的 ...

  8. jSignature做手动签名,canvas支持触摸屏的签名涂鸦插件

    整理的前面可以用的: <!doctype html> <html lang="en"> <head> <meta charset=&quo ...

  9. Eclipse/STS 在线安装阿里java代码规约插件

    1.打开Idea的在线安装插件界面,通过“Help”-->“Install New Software...” 进入 2. 在 “Work with” 栏输入插件包的下载地址:https://p3 ...

  10. Bryce1010 Acm模板

    目录 STL标准模板库 STL简介 STL pair STL set STL vector STL string STL stack STL queue STL map upper_bound和low ...