• 敌兵布阵


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

     1 #include <bits/stdc++.h>
     2 #define lid id<<1
     3 #define rid id<<1|1
     4 #define maxn 50005
     5 using namespace std;
     6 struct node
     7 {
     8     int l,r,num;
     9 }tr[maxn*4];
    10 int s[maxn];
    11 
    12 void push_up(int id)
    13 {
    14     tr[id].num=tr[lid].num+tr[rid].num;
    15 }
    16 void build(int id,int l,int r)
    17 {
    18     tr[id].l=l;tr[id].r=r;
    19     if(l==r)
    20     {
    21         tr[id].num=s[l];
    22         return ;
    23     }
    24     int mid=(l+r)>>1;
    25     build(lid,l,mid);
    26     build(rid,mid+1,r);
    27     push_up(id);
    28 }
    29 void update(int id,int l,int r,int add)
    30 {
    31     if(tr[id].l==l&&tr[id].r==r)
    32     {
    33         tr[id].num+=add;
    34         return ;
    35     }
    36     int mid=(tr[id].l+tr[id].r)>>1;
    37     if(l<=mid) update(lid,l,r,add);
    38     else update(rid,l,r,add);
    39     push_up(id);
    40 }
    41 int  query(int id,int l,int r)
    42 {
    43     if(tr[id].l>=l&&tr[id].r<=r)
    44     {
    45         return tr[id].num;
    46     }
    47     int mid=(tr[id].l+tr[id].r)>>1;
    48     if(r<=mid) return query(lid,l,r);
    49     else if(l>mid) return query(rid,l,r);
    50     else return query(lid,l,mid)+query(rid,mid+1,r);
    51 }
    52 int main()
    53 {
    54     int t;
    55     scanf("%d",&t);
    56     int flag=0;
    57     while(t--)
    58     {
    59         int n;
    60         scanf("%d",&n);
    61         for(int i=1;i<=n;i++) scanf("%d",&s[i]);
    62         build(1,1,n);
    63         char s[10];
    64         printf("Case %d:
    ",++flag);
    65         while(~scanf("%s",s))
    66         {
    67             int l,r,add;
    68             if(s[0]=='E') break;
    69             else if(s[0]=='A')
    70             {
    71                 scanf("%d%d",&l,&add);
    72                 update(1,l,l,add);
    73             }
    74             else if(s[0]=='S')
    75             {
    76                 scanf("%d%d",&l,&add);
    77                 update(1,l,l,-add);
    78             }
    79             else
    80             {
    81                 scanf("%d%d",&l,&r);
    82                 int ans=query(1,l,r);
    83                 printf("%d
    ",ans);
    84             }
    85         }
    86     }
    87     return 0;
    88 }
    View Code
  • 相关阅读:
    这是一篇通过open live writer发布的博文
    网卡重启失败
    2020年1月目标
    二、安装docker
    JS中的数据类型,包含ES6,set和map等等
    关于prototype和__proto__,最好的一些解释
    JS中call,apply和bind方法的区别和使用场景
    ThinkPHP5生成word文档代码库
    js/jquery操作iframe
    PHP技术--思维导图
  • 原文地址:https://www.cnblogs.com/mile-star/p/10597229.html
Copyright © 2020-2023  润新知