zoukankan      html  css  js  c++  java
  • 树状数组 代码

          转自博客 : https://www.cnblogs.com/fuyun-boy/p/5913438.html

    #include<iostream>
    #include<algorithm>
    #include<string>
    using namespace std;
    #define MAX 500000
    int N,M;
    int a[MAX],c[MAX];
    //======================================================
    void init();//
    void ADD(int ,int );//
    int sum(int );
    //======================================================
    void ADD(int x,int y)
    {
       for(int i=x;i<=N;i+=i&(-i)  ){
          c[i]+=y;
       }
    }
    //======================================================
    int sum(int x)
    {
       int SUM=0;
       for(int i=x;i>=1;i-=i&(-i))
          SUM+=c[i];
       return SUM;
    }
    //======================================================
    void init()
    {
       int aa,bb,cc;
       cin>>N>>M;
       for(int i=1;i<=N;i++){
          cin>>a[i];
          ADD( i , a[i] );
       }
       for(int i=1;i<=M;i++){
          cin>>aa>>bb>>cc;
          if(aa==1)ADD(bb,cc);
          if(aa==2)cout<<sum(cc)-sum(bb-1)<<endl;
       }
    }
    //======================================================
    int main()
    {
      init();
       return 0 ;
    }

          转自博客:https://www.cnblogs.com/acgoto/p/8583952.html

    int lowbit(int i)
    {
        return i & -i;//或者是return i-(i&(i-1));表示求数组下标二进制的非0最低位所表示的值
    }
    void update(int i,int val)//单点更新
    {
        while(i<=n){
            C[i]+=val;
            i+=lowbit(i);//由叶子节点向上更新树状数组C,从左往右更新
        }
    }
    int sum(int i)//求区间[1,i]内所有元素的和
    {
        int ret=0;
        while(i>0){
            ret+=C[i];//从右往左累加求和
            i-=lowbit(i);
        }
        return ret;
    }

        

  • 相关阅读:
    一些常看的网站 工具
    JavaScript 学习
    我的周记15——“5年后,你想成为怎样的人”
    一点分享:从日课到晨记
    跟着高淇学Python——第一到第三章总结
    在新的电脑上的Git本地库 与远程库关联前的一些设置
    搭建环境
    查询XML树
    Linq to XML的基本操作
    LINQ to XML概述
  • 原文地址:https://www.cnblogs.com/fzw1523/p/10265270.html
Copyright © 2011-2022 走看看