zoukankan      html  css  js  c++  java
  • HDU (线段树 单点更新) 敌兵布阵

    哎,又切了一天的水题。

    线段树果然必须自己写出来才能叫真正的会了,之前一直在套模板确实不好。

    这个题目是单点更新 之 单点增减,= ̄ω ̄=

     1 #include <cstdio>
     2 
     3 const int maxn = (1 << 20);
     4 
     5 int n, qL, qR, p, v, sum[maxn];
     6 
     7 void build(int o, int L, int R)
     8 {
     9     if(L == R) { scanf("%d", &sum[o]); return; }
    10     int M = (L + R) / 2;
    11     build(o*2, L, M);
    12     build(o*2+1, M+1, R);
    13     sum[o] = sum[o*2] + sum[o*2+1];
    14 }
    15 
    16 void update(int o, int L, int R)
    17 {
    18     if(L == R) { sum[o] += v; return; }
    19     int M = (L + R) / 2;
    20     if(p <= M) update(o*2, L, M);
    21     else update(o*2+1, M+1, R);
    22     sum[o] = sum[o*2] + sum[o*2+1];
    23 }
    24 
    25 int query(int o, int L, int R)
    26 {
    27     if(qL <= L && qR >= R) return sum[o];
    28 
    29     int ans = 0;
    30     int M = (L +R) / 2;
    31     if(qL <= M) ans += query(o*2, L, M);
    32     if(qR > M) ans += query(o*2+1, M+1, R);
    33     return ans;
    34 }
    35 
    36 char cmd[10];
    37 
    38 int main()
    39 {
    40     //freopen("in.txt", "r", stdin);
    41 
    42     int T; scanf("%d", &T);
    43 
    44     for(int kase = 1; kase <= T; kase++)
    45     {
    46         printf("Case %d:
    ", kase);
    47 
    48         scanf("%d", &n);
    49         build(1, 1, n);
    50 
    51         while(scanf("%s", cmd) == 1)
    52         {
    53             if(cmd[0] == 'E') break;
    54             if(cmd[0] == 'Q')
    55             {
    56                 scanf("%d%d", &qL, &qR);
    57                 printf("%d
    ", query(1, 1, n));
    58             }
    59             else
    60             {
    61                 scanf("%d%d", &p, &v);
    62                 if(cmd[0] == 'S') v = -v;
    63                 update(1, 1, n);
    64             }
    65         }
    66     }
    67 
    68     return 0;
    69 }
    代码君
  • 相关阅读:
    python编程基础之十四
    python编程基础之十三
    python编程基础之十二
    C++11的新特性
    第六章 分支语句和逻辑运算符
    第五章 循环和关系表达式
    C++ 管理数据内存的方法
    C++数组和指针
    第二、三章 开始学习C++、数据处理
    第一章 预备知识
  • 原文地址:https://www.cnblogs.com/AOQNRMGYXLMV/p/4456323.html
Copyright © 2011-2022 走看看