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

    题目链接

    中文题意,与上题类似。

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <queue>
     5 #include <cstdlib>
     6 #include <algorithm>
     7 const int maxn = 200000+10;
     8 using namespace std;
     9 int a[maxn], n, m;
    10 struct line
    11 {
    12     int l, r, val;  //val代表该区间的最大值
    13 }tr[4*maxn];
    14 
    15 void build(int o, int l, int r)
    16 {
    17     tr[o].l = l; tr[o].r = r;
    18     if(l==r)
    19     {
    20         tr[o].val = a[l];
    21         return;
    22     }
    23     int mid = (l+r)/2;
    24     build(2*o, l, mid);
    25     build(2*o+1, mid+1, r);
    26     tr[o].val = max(tr[2*o].val, tr[2*o+1].val);
    27 }
    28 int query(int o, int l, int r)
    29 {
    30     if(tr[o].l==l && tr[o].r==r)
    31         return tr[o].val;
    32     int mid = (tr[o].l+tr[o].r)/2;
    33     if(r<=mid) query(2*o, l, r);  //这里一定记住只要不跨区间就是l,r。因为这个错了几次
    34     else if(l > mid) query(2*o+1, l, r);
    35     else
    36     {
    37         return max(query(2*o, l, mid), query(2*o+1, mid+1, r));
    38     }
    39 }
    40 void update(int o, int p, int v)
    41 {
    42     if(tr[o].l==tr[o].r && tr[o].l==p)
    43     {
    44         tr[o].val = v;
    45         return;
    46     }
    47     int mid = (tr[o].l + tr[o].r)/2;
    48     if(p<=mid) update(2*o, p, v);
    49     else update(2*o+1, p, v);
    50     tr[o].val = max(tr[2*o].val, tr[2*o+1].val);
    51 }
    52 int main()
    53 {
    54     char ch;
    55     int i, l, r;
    56     while(~scanf("%d%d", &n, &m))
    57     {
    58         for(i = 1; i <= n; i++)
    59         scanf("%d", &a[i]);
    60         build(1, 1, n);
    61 
    62         for(i = 0; i < m; i++)
    63         {
    64             getchar();
    65             scanf("%c%d%d", &ch, &l, &r);
    66             if(ch=='Q')
    67                printf("%d
    ", query(1, l, r));
    68             else
    69                update(1, l, r);
    70         }
    71     }
    72     return 0;
    73 }
  • 相关阅读:
    猜数字小游戏的设计
    实验三 敏捷开发与XP实践 实验报告
    实验二Java面向对象程序设计
    课程总结报告
    Android实践项目汇报总结(下)
    Android实践项目汇报总结(上)修改
    Android项目开发四
    Android项目开发三
    Android项目开发二
    Android项目开发一
  • 原文地址:https://www.cnblogs.com/bfshm/p/3890951.html
Copyright © 2011-2022 走看看