树状数组模板

Posted hwy499

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了树状数组模板相关的知识,希望对你有一定的参考价值。

 HDU 1166(敌兵布阵)(树状数组 单点更新区间求和)

技术分享图片
#include<iostream>
#include<cstring>
#include<cmath>
using namespace std;
#define lowbit(x) x & (-x)//lowbit函数
#define LL long long  
LL a[100005],n;
void updata(LL x,LL v) {//更新函数
    while(x<=n) {
        a[x]+=v;
        x+=lowbit(x);
    }
}
LL query(LL x) {//查询函数
    LL sum=0;
    while(x) {
        sum+=a[x];
        x-=lowbit(x);
    }
    return sum;
}
int main() {
    LL t;
    cin>>t;
    LL d=1;
    while(t--) {
        cout<<"Case "<<d<<":"<<endl;
        cin>>n;
        LL s;
        memset(a,0,sizeof(a));
        for(LL i=1; i<=n; i++) {
            cin>>s;
            updata(i,s);
        }
        string ss;
        int l,r;
        while(cin>>ss)
        {
            if(ss=="End"){
                break;
            } 
            cin>>l>>r;
            if(ss[0]==A) {
                updata(l,r);
            } else if(ss[0]==S) {
                updata(l,-r);
            } else {
                cout<<query(r)-query(l-1)<<endl;
            }
        }
        d+=1;
    }
    return 0;
}
View Code

 

以上是关于树状数组模板的主要内容,如果未能解决你的问题,请参考以下文章

树状数组模板

树状数组2模板 Luogu 3368

树状数组1模板 Luogu 3374

模板树状数组

模板树状数组

P3372 模板线段树 1(区间修改区间查询)(树状数组)