思路
单点修改区间查询模板题。
理解树状数组的原理就好做了。
代码
#include<iostream>
#include<cstdio>
using namespace std;
long long n,q,a,c[1000010];
long long w,x,y;
long long lowbit(long long x)
{
return x&-x;
}
void add(long long x,long long y)
{
while(x<=n)
{
c[x]+=y;
x+=lowbit(x);
}
}
long long sum(long long x)
{
long long ans=0;
while(x!=0)
{
ans+=c[x];
x-=lowbit(x);
}
return ans;
}
int main()
{
cin>>n>>q;
for(int i=1; i<=n; i++)
{
scanf("%lld",&a);
add(i,a);
}
for(int i=1; i<=q; i++)
{
scanf("%lld%lld%lld",&w,&x,&y);
if(w==1)
add(x,y);
if(w==2)
printf("%lld\n",sum(y)-sum(x-1));
}
return 0;
}