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

    题目链接:

    hdu: http://acm.hdu.edu.cn/showproblem.php?pid=1754

    题解:

    单点更新,成段查询。

    代码:

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 #define lson o<<1
     6 #define rson (o<<1)|1
     7 #define M l+(r-l)/2
     8 using namespace std;
     9 
    10 const int maxn = 2e5 + 10;
    11 
    12 int n, m;
    13 int maxv[maxn<<2];
    14 
    15 void build(int o, int l, int r) {
    16     if (l == r) {
    17         scanf("%d", maxv + o);
    18     }
    19     else {
    20         build(lson, l, M);
    21         build(rson, M + 1, r);
    22         maxv[o] = max(maxv[lson], maxv[rson]);
    23     }
    24 }
    25 
    26 int _po, _v;
    27 void update(int o, int l, int r) {
    28     if (l == r) {
    29         maxv[o] = _v;
    30     }
    31     else {
    32         if (_po <= M) update(lson, l, M);
    33         else update(rson, M + 1, r);
    34         maxv[o] = max(maxv[lson], maxv[rson]);
    35     }
    36 }
    37 
    38 int ql,qr;
    39 int _max;
    40 void query(int o, int l, int r) {
    41     if (ql <= l&&r <= qr) {
    42         //printf("(%d,%d):%d
    ", l, r,maxv[o]);
    43         _max = max(_max, maxv[o]);
    44     }
    45     else {
    46         //printf("(%d,%d):%d
    ", l, r, maxv[o]);
    47         if (ql <= M) query(lson, l, M);
    48         if (qr > M) query(rson, M + 1, r);
    49     }
    50 }
    51 
    52 int main() {
    53     while (scanf("%d%d", &n, &m) == 2) {
    54         build(1, 1, n);
    55         char cmd[11];
    56         while (m--) {
    57             scanf("%s", cmd);
    58             if (cmd[0] == 'Q') {
    59                 _max = -1;
    60                 scanf("%d%d", &ql,&qr);
    61                 query(1, 1, n);
    62                 printf("%d
    ", _max);
    63             }
    64             else if (cmd[0] == 'U') {
    65                 scanf("%d%d", &_po, &_v);
    66                 update(1, 1, n);
    67             }
    68         }
    69     }
    70     return 0;
    71 }
  • 相关阅读:
    Seconds_Behind_Master的计算
    innnodb 线程在做什么?
    Mysql Join_buffer_size的使用原理
    C 实现位图排序
    C 内存池的实现
    C实现队列
    mysqld执行的函数栈
    Source Insight的基本用法
    MySQL高性能以及高安全测试
    【设计篇】状态与策略
  • 原文地址:https://www.cnblogs.com/fenice/p/5426017.html
Copyright © 2011-2022 走看看