zoukankan      html  css  js  c++  java
  • 线段树

     1 //线段树数组静态模板
     2 
     3 
     4 #include <iostream>
     5 #include <cstdio>
     6 #define MAX 50003
     7 #define ll long long
     8 
     9 using namespace std;
    10 
    11 struct node
    12 {
    13     int w;
    14     int lch, rch;
    15 }Tree[4*MAX];
    16 ll ans;
    17 
    18 void CreatTree(int l, int r, int i)
    19 {
    20     int mid;
    21 
    22     Tree[i].lch = l;
    23     Tree[i].rch = r;
    24     if(l == r){
    25         scanf("%d",&Tree[i].w);
    26         return ;
    27     }
    28     mid = (l+r)>>1;
    29     CreatTree(l,mid,i<<1);
    30     CreatTree(mid+1,r,i<<1|1);
    31     Tree[i].w = Tree[i<<1].w+Tree[i<<1|1].w;
    32 }
    33 
    34 void QueryTree(int L, int R, int l, int r, int i)
    35 {
    36     int mid;
    37 
    38     if(R<l || L>r)
    39         return ;
    40     if(L>=l&&R<=r){
    41         ans += Tree[i].w;
    42         return ;
    43     }
    44     mid = (L+R)>>1;
    45     QueryTree(L,mid,l,r,i<<1);
    46     QueryTree(mid+1,R,l,r,i<<1|1);
    47 }
    48 
    49 void UpdateTree(int L, int R, int pos, int num, int i)
    50 {
    51     int mid;
    52 
    53     if(L == R){
    54         Tree[i].w += num;
    55         return ;
    56     }
    57     mid = (L+R)>>1;
    58     if(pos<=mid)
    59         UpdateTree(L,mid,pos,num,i<<1);
    60     else
    61         UpdateTree(mid+1,R,pos,num,i<<1|1);
    62     Tree[i].w = Tree[i<<1].w+Tree[i<<1|1].w;
    63 }
    64 
    65 int main()
    66 {
    67     int i, n, t, a, b, k = 0;
    68     char str[10];
    69 
    70     scanf("%d",&t);
    71     while(t-- && scanf("%d",&n)){
    72         CreatTree(1,n,1);
    73         printf("Case %d:
    ",++k);
    74         while(scanf("%s",str),str[0]!='E'){
    75             scanf("%d %d",&a,&b);
    76             if(str[0] == 'Q'){
    77                 ans = 0;
    78                 QueryTree(1,n,a,b,1);
    79                 printf("%lld
    ",ans);
    80             }
    81             else if(str[0] == 'A')
    82                 UpdateTree(1,n,a,b,1);
    83             else
    84                 UpdateTree(1,n,a,-b,1);
    85         }
    86     }
    87     return 0;
    88 }


    作者:blueppo
    出处:http://www.cnblogs.com/Yan-C/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    俺自己可以写点代码了
    学姐,孙哥
    Linux/Unix 常用参数使用说明
    DB2 rollforward 命令使用详解
    DB2 create tablespace
    db2 基础语法
    VMWARE虚拟机不显示主机共享的文件夹解决办法
    DB2创建数据库常用参数详解
    从Linux访问Windows共享目录
    Data Flow >> Source >> Error Output >> Error & Truncation: Ignore Failure, Redirect Now, Fail Component
  • 原文地址:https://www.cnblogs.com/Yan-C/p/3899448.html
Copyright © 2011-2022 走看看