#include<cstdio>
int a[500005],c[500005],n,m,o,x,y;
int lowbit(int m)
{
return m&(-m);
}
int getsum(int x)
{
int ans=0;
while(x>0)
{
ans+=c[x];
x-=lowbit(x);
}
return ans;
}
void change(int x, int value)
{
a[x] += value;
while(x <= n)
{
c[x] += value;
x += lowbit(x);
}
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
change(i,a[i]);
}
for(int i=1;i<=m;i++)
{
scanf("%d",&o);
if(o==2)
{
scanf("%d%d",&x,&y);
int ans=getsum(y)-getsum(x-1); //求[x,y]的和
printf("%d\n",ans);
}
if(o==1)
{
scanf("%d%d",&x,&y);
change(x,y);
}
}
return 0;
}
树状数组模板
最新推荐文章于 2023-04-13 21:15:37 发布