题目剩下两篇文章已经发过了,所以这里直接贴代码。。
#include<cstdio>
using namespace std;
#define M 261244
int n,i,a[524289],m;
int read()
{
int w=0,c=1;
char ch=getchar();
while (ch<'0' || ch>'9')
{
if (ch=='-')
c=-1;
ch=getchar();
}
while (ch>='0' && ch<='9')
{
w=w*10+ch-'0';
ch=getchar();
}
return w*c;
}
int query(int s,int t)
{
int ans=0;
for (s=s+M-1,t=t+M+1;s^t^1;s/=2,t/=2)
{
if (~s&1)
ans+=a[s^1];
if (t&1)
ans+=a[t^1];
}
return ans;
}
void change(int x,int y)
{
x+=M;
a[x]+=y;
while (x>1)
{
x/=2;
a[x]=a[2*x]+a[2*x+1];
}
}
int main()
{
int p,x,y;
n=read();
for (i=1;i<=n;i++)
{
x=read();
change(i,x);
}
m=read();
for (i=1;i<=m;i++)
{
p=read();
x=read();
y=read();
if (p==1)
change(x,y);
if (p==2)
printf("%d\n",query(x,y));
}
return 0;
}