先上ACcode:
#include <bits/stdc++.h>
using namespace std;
#define int long long
int n,m,tree[2000010];
int lowbit(int k)
{
return k & -k;
}
void add(int x,int k)
{
while(x<=n)
{
tree[x]+=k;
x+=lowbit(x);
}
}
int sum(int x)
{
int ans=0;
while(x!=0)
{
ans+=tree[x];
x-=lowbit(x);
}
return ans;
}
signed main()
{
ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
cin>>n>>m;
for(int i=1;i<=n;i++)//建树
{
int a;
cin>>a;
add(i,a);
}
for(int i=1;i<=m;i++)
{
int a,b,c;
cin>>a>>b>>c;
if(a==1)
add(b,c);//添加
if(a==2)
cout<<sum(c)-sum(b-1)<<"\n";//区间和
}
return 0;
}
分析: