树状数组代码记录
树状数组代码记录
因为发现树状数组除了代码已经忘干净了,所以放一张图。
不难通过图来理解。
#include<iostream>
#define N 1000001
using namespace std;
int a[N],c[N];
int n,m;
int lowbit(int x)
{
return x&-x;//例子:x=30 其二进制为 11110 返回的是10的十进制
}
int query(int x)
{
int sum=0;
for(int i=x;i>0;i-=lowbit(i))
{
sum+=c[i];
}
return sum;
}
void add(int x,int delta)
{
for(int i=x;i<=n;i+=lowbit(i)) c[i]+=delta;
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
{
cin>>a[i];
add(i,a[i]);
}
for(int i=1;i<=m;i++)
{
int q,x,y;
cin>>q>>x>>y;
if(q==1) add(x,y);
if(q==2)
{
cout<<query(y)-query(x-1)<<endl;
}
}
}