zoukankan      html  css  js  c++  java
  • HDU1166 敌兵布阵

    解题思路:线段树模板题,好久没写线段树了,练练手,发现不像以前那么迷茫了,

        脑海中已经可以有清晰的图像了。这样,比较科学。上代码:

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<algorithm>
     4 using namespace std;
     5 #define lson l,m,rt<<1
     6 #define rson m+1,r,rt<<1 | 1
     7 const int maxn = 50005;
     8 int A[maxn<<2], t, n, kase = 1;
     9 char str[10];
    10 
    11 void Sum(int rt)
    12 {
    13     A[rt] = A[rt<<1] + A[rt<<1 | 1];
    14 }
    15 
    16 void Build(int l, int r, int rt)
    17 {
    18     if(l == r)
    19     {
    20         scanf("%d", &A[rt]);
    21         return ;
    22     }
    23     int m = (l + r) >> 1;
    24     Build(lson);
    25     Build(rson);
    26     Sum(rt);
    27 }
    28 
    29 void Update(int p, int add, int l, int r, int rt)
    30 {
    31     if(l == r)
    32     {
    33         A[rt] += add;
    34         return ;
    35     }
    36     int m = (l + r) >> 1;
    37     if(p <= m) Update(p, add, lson);
    38     else Update(p, add, rson);
    39     Sum(rt);
    40 }
    41 
    42 int Query(int ll, int rr, int l, int r, int rt)
    43 {
    44     if(ll <= l && rr >= r) return A[rt];
    45     int m = (l + r) >> 1;
    46     int ret = 0;
    47     if(ll <= m) ret += Query(ll, rr, lson);
    48     if(rr > m) ret += Query(ll, rr, rson);
    49     return ret;
    50 }
    51 
    52 
    53 
    54 int main()
    55 {
    56     int a, b;
    57     scanf("%d", &t);
    58     while(t--)
    59     {
    60         scanf("%d", &n);
    61         Build(1, n, 1);
    62         printf("Case %d:
    ",kase++);
    63         while(1)
    64         {
    65             scanf("%s", str);
    66             if(str[0] == 'E') break;
    67             if(str[0] == 'Q')
    68             {
    69                 scanf("%d %d", &a, &b);
    70                 int ans = Query(a, b, 1, n, 1);
    71                 printf("%d
    ", ans);
    72             }
    73             if(str[0] == 'A')
    74             {
    75                 scanf("%d %d", &a, &b);
    76                 Update(a, b, 1, n, 1);
    77             }
    78             if(str[0] == 'S')
    79             {
    80                 scanf("%d %d", &a, &b);
    81                 Update(a, -b, 1, n, 1);
    82             }
    83         }
    84     }
    85     return 0;
    86 }
    View Code
  • 相关阅读:
    System.Net.Http.HttpClient POST 未能创建 SSL/TLS 安全通道
    SQL Server用户权限查询
    IIS 7 Deploy .Net Framework 4.8 Application
    System.Net.Http.HttpClient 模拟登录并抓取弹窗数据
    HtmlAgilityPack Sample
    嵌套 struct & class 的遍历
    SQL循环插入测试数据
    windows文本转语音 通过java 调用python 生成exe可执行文件一条龙
    Centos8 删除了yum.repos.d 下面的文件
    nacos 配置
  • 原文地址:https://www.cnblogs.com/loveprincess/p/4916007.html
Copyright © 2011-2022 走看看