zoukankan      html  css  js  c++  java
  • 线段树(单点更新) HDU 1754 I Hate It

    题目传送门

     1 /*
     2     线段树基本功能:区间最大值,修改某个值
     3 */
     4 #include <cstdio>
     5 #include <cstring>
     6 #include <algorithm>
     7 #define lson l, m, rt << 1
     8 #define rson m+1, r, rt << 1|1
     9 
    10 const int MAX_N = 200000 + 10;
    11 int sum[MAX_N<<2];
    12 int a[MAX_N<<2];
    13 
    14 void pushup(int rt)
    15 {
    16     sum[rt] = sum[rt<<1] + sum[rt<<1|1];
    17 }
    18 
    19 void maxrt(int rt)
    20 {
    21     sum[rt] = std::max (sum[rt<<1], sum[rt<<1|1]);
    22 }
    23 
    24 void build(int l, int r, int rt)
    25 {
    26     if (l == r)
    27     {
    28         scanf ("%d", &sum[rt]);
    29         return ;
    30     }
    31     int m = (l + r) >> 1;
    32     build (lson);
    33     build (rson);
    34     maxrt (rt);
    35 }
    36 
    37 void update(int p, int up, int l, int r, int rt)
    38 {
    39     if (l == r)
    40     {
    41         sum[rt] = up;
    42         return ;
    43     }
    44     int m = (l + r) >> 1;
    45     if (p <= m)    update (p, up, lson);
    46     else    update  (p, up, rson);
    47     maxrt (rt);
    48 }
    49 
    50 int query(int ql, int qr, int l, int r, int rt)
    51 {
    52     if (ql <= l && r <= qr)
    53     {
    54         return sum[rt];
    55     }
    56     int m = (l + r) >> 1;
    57     int ans = 0;
    58     if (ql <= m)    ans = std::max(ans, query (ql, qr, lson));
    59     if (qr > m)        ans = std::max(ans, query (ql, qr, rson));
    60     
    61     return ans;
    62 }
    63 
    64 
    65 int main(void)        //HDU 1754 I Hate It
    66 {
    67     //freopen ("inB.txt", "r", stdin);
    68     int n, m, ans, b, c;
    69     char ch[2];
    70     
    71     while (~scanf ("%d%d", &n, &m))
    72     {
    73         build (1, n, 1);
    74         while (m--)
    75         {
    76             scanf ("%s%d%d", &ch, &b, &c);
    77             if (ch[0] == 'Q')
    78             {
    79                 ans = query (b, c, 1, n, 1);
    80                 printf ("%d
    ", ans);
    81             }
    82             if (ch[0] == 'U')
    83             {
    84                 update (b, c, 1, n, 1);
    85             }
    86         }
    87     }
    88     
    89     return 0;
    90 }
    编译人生,运行世界!
  • 相关阅读:
    【HTML】CSS中的margin、border、padding区别
    kill -9 和kill -15,区别,python可以自定义at_exit钩子
    Prometheus 监控Windows机器
    Prometheus下的 promQL
    (4.46)sql server中的rule
    【sql server alwayson】sql servrer alwayson的实例升级
    prometheus+grafana+Alertmanager基本实践
    prometheus+grafana安装部署(入门初探)
    运维监控概述
    mysql基础原理大全
  • 原文地址:https://www.cnblogs.com/Running-Time/p/4506475.html
Copyright © 2011-2022 走看看