zoukankan      html  css  js  c++  java
  • 线段树(单点更新) HDOJ 2795 Billboard

    题目传送门

     1 /*
     2     主要利用线段树求区间最值,sum[]代表位置可用空间
     3     每次找到最大值的位置
     4     功能:查询最靠前能容纳广告的位置
     5 */
     6 #include <cstdio>
     7 #include <cstring>
     8 #include <algorithm>
     9 #define lson l, m, rt << 1
    10 #define rson m+1, r, rt << 1 | 1
    11 
    12 const int MAX_N = 2000000 + 10;
    13 int w[MAX_N];
    14 int num[MAX_N];
    15 int sum[MAX_N << 2];
    16 int n, h, W;
    17 
    18 void maxsum(int rt)
    19 {
    20     sum[rt] = std::max (sum[rt << 1], sum[rt << 1 | 1]);
    21 }
    22 
    23 void build(int l, int r, int rt)
    24 {
    25     sum[rt] = W;
    26     if (l == r) return ;
    27     int m = (l + r) >> 1;
    28     build (lson);
    29     build (rson);
    30 }
    31 
    32 int query(int p, int l, int r, int rt)
    33 {
    34     if (l == r)
    35     {
    36         sum[rt] -= p;        //如果可以用,更新sum,update在query里做了
    37         return l;            //返回该位置
    38     }
    39     int m = (l + r) >> 1;
    40     int ans;
    41     if (p <= sum[rt << 1])        //如果p小于左孩子的最大值,则往左边下去
    42         ans = query (p, lson);
    43     else
    44         ans = query (p, rson);
    45     maxsum (rt);
    46 
    47     return ans;
    48 }
    49 
    50 int main(void)        //HDOJ 2795 Billboard
    51 {
    52     //freopen ("inD.txt", "r", stdin);
    53 
    54     while (~scanf ("%d%d%d", &h, &W, &n))
    55     {
    56         if (h > n)        // h <= n
    57             h = n;
    58 
    59         build (1, h, 1);
    60 
    61         int x;
    62         while (n--)
    63         {
    64             scanf ("%d", &x);
    65             if (x > sum[1])    printf ("%d
    ", -1);    //所有位置的最大值
    66             else    printf ("%d
    ", query(x, 1, h, 1));
    67         }
    68     }
    69 
    70     return 0;
    71 }
    编译人生,运行世界!
  • 相关阅读:
    18、led驱动程序的实现
    17、字符设备控制技术
    16、驱动访问大揭秘
    14、字符驱动编程模型
    个人开发—进度记录(一)
    个人开发—需求
    学习进度条
    敏捷开发第二阶段个人(七)
    敏捷开发第二阶段个人(六)
    敏捷开发第二阶段个人(五)
  • 原文地址:https://www.cnblogs.com/Running-Time/p/4506495.html
Copyright © 2011-2022 走看看