首页 > 代码库 > 树状数组

树状数组

树状数组

#include<cstdio>#include<cstring>#include<cstdlib>#include<iostream>#include<algorithm>#include<cmath>#include<queue>using namespace std;const int MAX=100000+10;int N,X;int c[MAX];void add(int x,int v){    while(x<=N)    {        c[x]+=v;        x+=x&(-x);    }}int ASK(int t){    int ans=0;    while(t>=1)    {        ans+=c[t];        t-=t&(-t);    }    return ans;}int main(){    scanf("%d",&N);    for(int i=1;i<=N;i++)    {        scanf("%d",&X);        add(i,X);    }    int m,x,y,z;    scanf("%d",&m);    for(int i=1;i<=m;i++)    {        scanf("%d%d%d",&x,&y,&z);        if(x==1){            add(y,z);        }        else  {            cout << ASK(z)-ASK(y-1)<<endl;         }    }    return 0;}

 

树状数组