题目链接:https://vjudge.net/problem/HDU-2795

思路:h = 1e9行不通,因为广告是1*w的,所以n个广告最多只需要 h = n的高度,那么h=2e5就可以接受了。

用树状数组维护区间最大值。

从前往后区间查询哪一大块块首先满足条件,然后一直缩小区间,直到区间长度等于1,输出答案,然后修改该点可用的w,

再修改区间最大值。

 1 #include <iostream>
 2 #include <algorithm>
 3 #include <map>
 4 #include <queue>
 5 #include <string>
 6 #include <stack>
 7 #include <vector>
 8 #include <list>
 9 #include <cstdio>
10 #include <cstring>
11 #include <cmath>
12 using namespace std;
13 #define ll long long
14 #define pb push_back
15 #define fi first
16 #define se second
17
18 const int N = 2e5+10;
19 int a[N],c[N];
20 int n,h,w;
21
22 inline int lb(int x){
23     return x&(-x);
24 }
25
26 void update(int inx){
27     for(int i = inx; i <= h; i += lb(i)){
28         c[i] = a[i];
29         int d = lb(i);
30         if(d == 1) continue;
31         for(int j = 1; j < d; j <<= 1)
32             c[i] = max(c[i], c[i-j]);
33     }
34 }
35
36 inline bool fun(int& l,int& r,int it){
37     while(r <= h){
38      //   cout << "fun" << endl;
39         if(c[r] < it){
40             l = r;
41             r += lb(r);
42             if(r > h) r = l+1;//要遍历所有的分块区间
43         }
44         else return 1;
45     }
46     return 0;
47 }
48
49 void solve(){
50     while(~scanf("%d%d%d",&h,&w,&n)){
51         h = h >= n ? n : h;
52         for(int i = 1; i <= h; ++i) a[i] = c[i] = w;//初始化
53         int it;
54         for(int p = 1; p <= n; ++p){
55             scanf("%d",&it);
56             int l = 1,r = 1,ok = 0;
57             while(fun(l,r,it)){//找是否有满足的区间
58                // cout << "main" << endl;
59                 ok = 1;
60                 if(l == r){
61                     printf("%d\n",l);
62                     a[l] -= it;
63                     update(l);
64                     break;
65                 }
66                 else r = ++l;//缩小区间
67             }
68             if(!ok) printf("-1\n");
69         }
70     }
71 }
72
73 int main(){
74
75   //  ios::sync_with_stdio(false);
76   //  cin.tie(0); cout.tie(0);
77     solve();
78
79     return 0;
80 }

Billboard HDU - 2795(树状数组,单点修改,区间查询)相关推荐

  1. hdu2642二维树状数组单点更新+区间查询

    http://acm.hdu.edu.cn/showproblem.php?pid=2642 题目大意:一个星空,二维的.上面有1000*1000的格点,每个格点上有星星在闪烁.一开始时星星全部暗淡着 ...

  2. HDU ACM 4031 Attack (树状数组--单点查询+区间更新)

    http://acm.hdu.edu.cn/showproblem.php?pid=4031 用了树状数组的区间更新 单点查找(一般为单点更新 区间查找) 例如 区间(2,4)加1 则Updata(2 ...

  3. hdu 1166 树状数组解

    树状数组解决   (关于树状数组参考大佬的博客https://www.cnblogs.com/hsd-/p/6139376.html) 然后就很好理解这题了,代码附上 /*hdu 1166 单点修改, ...

  4. 树状数组区间修改和区间求和

    最一般树状数组能做到的操作是单点修改,区间求和,都是log(n)级别的.原理就是用树状数组维护a[i]的部分和. 想要做到修改区间,求单点值也很简单,用树状数组维护a[i]的差分数组d[i]的部分和既 ...

  5. HDU 4358 树状数组+思路

    http://acm.hdu.edu.cn/showproblem.php?pid=4358 如图所示,当k==3时,如果我们扫描到红线所在的位置. 则符合条件的区间就是从红线到两条紫线所包含的区间( ...

  6. hdu 4991(树状数组优化dp)

    Ordered Subsequence Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Othe ...

  7. 校门外的树——树状数组+区间修改

    校门外的树 [题目分析]题目描述的是一种区间修改,看起来好像要用线段树.但是对于这种区间内部没有差别并且查询的是区间内的类别的问题,是可以转化为树状数组进行的.毕竟树状数组更加简单. 我们的关注点应该 ...

  8. hdu 3333 树状数组+离线处理

    思路:既然要求的是不同的元素的和,那么我们可以想办法让每个值在区间中只出现一次,于是想到了离线的算法:将查询按照右端点排序,位置在右端点之前的元素都插入到树状数组中,对于已经出现过的值,我们要先删除( ...

  9. hdu 4417(树状数组+离线算法)

    解题思路:这道题要求某区间内比h小的个数,其实这里可以类似于树状数组求逆序数那样.关键是如何转换成树状数组的模型,这才是本题的难点. 我们首先分析,如果知道h在该区间的哪个位置,那么剩下的就很好做了. ...

  10. hdu 1394(树状数组求逆序数)

    解题思路:这道题是求循环数组中逆序数最小值,求逆序数这里肯定是用树状数组.只是这里有一点点变化,由于题目中n位数是0-n-1的一个排列,所以num[i]可表示为比num[i]小的数的个数.把第一位的数 ...

最新文章

  1. c malloc 头文件_C 数据类型
  2. 网易云信集成视频教程(六):如何快速实现iOS下IM自定义消息收发?
  3. python编程发展_编程的发展史及Python简介
  4. sentinel 端口_双剑合璧Nacos结合Sentinel实现流量安全控制(一):Sentinel核心库和控制台...
  5. 加载程序中数据库账号密码加密策略wallet_04
  6. Linux定时器:无节拍机制tickless(CONFIG_NO_HZ)
  7. 为什么numba不能提高背包功能的速度?
  8. BZOJ.4337.[BJOI2015]树的同构(树哈希)
  9. paip.uapi 获取网络url内容html 的方法java php ahk c++ python总结.
  10. ubuntu安装文泉驿字体
  11. 免越狱版 iOS 抢红包插件
  12. VSTO开发Powerpoint插件
  13. Java首选项Preferences
  14. 来电弹屏--线程间操作无效: 从不是创建控件的线程访问它
  15. 如何用电脑破解WiFi
  16. android 动画闪屏问题,Android中闪屏实现方法小结(普通闪屏、倒计时闪屏、倒计时+动画...
  17. 《孩子,你慢慢来》的读书笔记与读后感2600字
  18. MySQL异常一之: You can‘t specify target table for update in FROM clause解决办法
  19. 干货分享|串流游戏软件大比拼
  20. 计算机类sci四大水刊,材料灌水的sci期刊_十大水榜sci杂志_四大垃圾sci杂志

热门文章

  1. 要养成良好的书写SQL的习惯
  2. 深入理解Magento – 第六章 – 高级Magento模型
  3. 基于Lock的卖票和生产者消费者案例
  4. Linux 守护进程的启动方法
  5. linux设置date-hwclock-clock
  6. linux下三个时间与find命令
  7. Kubernetes-ReplicaSet(RS)(五)
  8. 安装fastdfs依赖包
  9. django-前端上传图片190912
  10. linux-三个文件-用户文件-组文件-密码文件