• 树状数组2模板 Luogu 3368


    树状数组区间修改&&**……*&%&……

    好吧,我看了Running-coder的博客,久久才明白……

    废话不多说:讲思路:无………………

    代码:

     1  #include<cstdio>
     2 #include<iostream>
     3 #include<cmath>
     4 #include<algorithm>
     5 using namespace std;
     6 int bit[1000000],n,m,d,p,xx,yy,kk;
     7 int lazy[1000000];
     8 int a[1000000];
     9 
    10 void add(int i,int x){
    11     while(i<=n){
    12         bit[i]+=x;
    13         i+=i & -i;
    14     }
    15 }
    16 
    17 void addn(int x,int y,int k){
    18     while(y>=x){
    19         lazy[y]+=k;
    20         y -=y & -y;
    21     }
    22     x--;
    23     while(x>y){
    24         lazy[x]-=k;
    25         x -=x& -x;
    26     }
    27 }
    28 
    29 int sum(int i){
    30     int s=a[i];
    31     while(i<=n){
    32         s+=lazy[i];
    33         i+=i & -i;
    34     }
    35     return s;
    36 }
    37 
    38 int main(){
    39     scanf("%d %d",&n,&m);
    40     for(int j=1;j<=n;j++){
    41         scanf("%d",&d);
    42         add(j,d);
    43         a[j]=d;
    44     }
    45     for(int j=1;j<=m;j++){
    46         scanf("%d",&p);
    47         switch (p){
    48             case 1:{
    49                 scanf("%d %d %d",&xx,&yy,&kk);
    50                 addn(xx,yy,kk);
    51                 break;
    52             }
    53             case 2:{
    54                 scanf("%d",&xx);
    55                 cout<<sum(xx)<<endl;
    56                 break;
    57             }
    58         }
    59     }
    60     return 0;
    61 }  
  • 相关阅读:
    java 用代码实现判断字符串的开头和结尾
    java基础 1-path
    C#基础(语句 for循环)
    C#基础(数组)
    C#基础(语句 if else)
    C#基础(变量、常量、运算符)
    继承-person
    继承-字母表
    继承-monkey
    继承-people
  • 原文地址:https://www.cnblogs.com/Misaki-Mei/p/7401533.html
Copyright © 2020-2023  润新知