问题:
树状数组: 单点修改,区间查询
感觉
还是挺简单的嘛 就一个lowbit
CODE
#include <bits/stdc++.h>
using namespace std;
const int N = 5e5+10;
typedef long long ll;
ll a[N],c[N];
ll n,m;
ll lowbit(ll x)
{
return x&(-x);
}
void updata(ll i,ll k)
{
while(i<=n)
{
c[i]+=k;
i+=lowbit(i);
}
}
ll getsum(ll i)
{
ll res = 0;
while(i>0)
{
res+=c[i];
i-=lowbit(i);
}
return res;
}
void solve()
{
cin>>n>>m;
for(ll i = 1; i<=n ; i++)
{
scanf("%lld",&a[i]);
updata(i,a[i]);
}
for(ll i =1; i<=m; i++)
{
ll x,y;
ll op;
scanf("%lld",&op);
scanf("%lld%lld",&x,&y);
if(op == 1)
updata(x,y);
else
printf("%lld\n",getsum(y)-getsum(x-1));
}
}
int main()
{
solve();
return 0;
}