首页 > 编程语言 > 详细

树状数组(BIT)

时间:2019-03-05 20:45:19      阅读:160      评论:0      收藏:0      [点我收藏+]

 可以实现基本操作:

1、给定 i ,x . 给 bit[i] 加上 x

2、给定 l , r . 求出 bit[l] +...+ bit[r] 

 

技术分享图片
#include<iostream>
#include<cmath>
#include<cstdio>
using namespace std;
const int maxn = 1e6 + 10;
#define int long long
int bit[maxn];
int n, q;
int lowbit(int i){
    return i&(-i);
}
long long getsum(int i){   //bit[1]+...+bit[i]  前缀和
    long long res = 0;
    while (i >0 ){
        res += bit[i];
        i -= lowbit(i);
    }
    return res;
}
void add(int i, int x){    //在bit[i]上加上x
    while (i <=n){
        bit[i] += x;
        i += lowbit(i);
    }
}
int main()
{
    cin >> n >> q;    //n和数,q次查询
    int z;
    for (int i = 1; i <= n; i++){
        cin >> z;
        add(i,z);
    }
    int a,b,c;
    while (q--){
        
        cin >> a >> b >> c;
        if (a == 1){
            add(b,c);
        }
        else if(a == 2){
            cout << getsum(c)-getsum(b-1) << endl;
        }
    }
    return 0;
}
View Code

 

树状数组(BIT)

原文:https://www.cnblogs.com/looeyWei/p/10479054.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!