zoukankan      html  css  js  c++  java
  • 单点更新,区间求和

     1 #include <iostream>
     2 #include <cstdio>
     3 using namespace std;
     4 
     5 const int N=1e5+5;
     6 int n,m;
     7 int sum[N<<2];
     8 
     9 void Update(int rt){
    10     sum[rt]=sum[rt<<1]+sum[rt<<1|1];
    11 }
    12 
    13 void Build(int l,int r,int rt){
    14     if(l==r) {scanf("%d",&sum[rt]);return;}
    15     int mid=(l+r)>>1;
    16     Build(l,mid,rt<<1);
    17     Build(mid+1,r,rt<<1|1);
    18     Update(rt);  //不要忘记往上更新
    19 }
    20 
    21 void Add(int l,int r,int rt,int p,int v){
    22     if(l==r) {sum[rt]+=v;return;}
    23     int mid=(l+r)>>1;
    24     if(p<=mid) Add(l,mid,rt<<1,p,v);
    25     else Add(mid+1,r,rt<<1|1,p,v);
    26     Update(rt);   //不要往上更新
    27 }
    28 
    29 int query(int l,int r,int rt,int L,int R){
    30     if(L<=l&&R>=r) return sum[rt];
    31     int mid=(l+r)>>1;
    32     int sum=0;   //递归
    33     if(L<=mid) sum+=query(l,mid,rt<<1,L,R);
    34     if(R>mid) sum+=query(mid+1,r,rt<<1|1,L,R);
    35     return sum;
    36 }
    37 
    38 int main()
    39 {
    40     scanf("%d",&n);
    41     Build(1,n,1);
    42     scanf("%d",&m);
    43     while(m--){
    44         int a,b,c;
    45         scanf("%d%d%d",&a,&b,&c);
    46         if(a==1) Add(1,n,1,b,c);
    47         else if(a==2) printf("%d
    ",query(1,n,1,b,c));
    48     }
    49     return 0;
    50 }
  • 相关阅读:
    fastjson-alibaba
    ubuntu 入门
    资料文档
    asp.net mvc View视图相关
    视频
    js第三方
    工具类网址
    [转]初学者的编程自学指南
    seajs的使用--主要了解模块化
    其它
  • 原文地址:https://www.cnblogs.com/qq-1585047819/p/10986982.html
Copyright © 2011-2022 走看看