#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
const int MAXN = 500000 + 5;
int c[MAXN];
int n,m;
inline int lowbit(int x){return x&(-x);}
inline void swap(int &a,int &b){a^=b;b^=a;a^=b;}
void sum(int x,int y)
{
if(x>y)swap(x,y);
x--;
int l=0,r=0;
for(;x>0;x-=lowbit(x))l+=c[x];
for(;y>0;y-=lowbit(y))r+=c[y];
printf("%d\n",r-l);
}
void add(int x,int val){for(;x<=n;x+=lowbit(x))c[x]+=val;}
int main()
{
memset(c,0,sizeof(c));
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
int b;
scanf("%d",&b);
add(i,b);
}
scanf("%d",&m);
while(m--)
{
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
if(x==1)add(y,z);
else sum(y,z);
}
return 0;
}
树状数组
最新推荐文章于 2024-06-14 21:55:04 发布