题目大意:
传送门:点我传送
我的理解:
使用树状数组求解;
我的代码:
#include<cstdio>
#include<iostream>
#include<algorithm>
#define MAX_N 1000005
using namespace std;
int a[MAX_N];
int n;
int lowbit(int x)
{
return x&(-x);
}
void begin(){
int t,i,j;
for(i=n;i>=1;i--)
{
t=0;
for(j=i-lowbit(i)+1;j<=i;j++)
t=a[j]+t;
a[i]=t;
}
}
int add(int i,int y)
{
while(i<=n)
{
a[i]=a[i]+y;
i=lowbit(i)+i;
}
}
int query(int x)
{
int sum=0;int i=x;
while(i>0)
{
sum=sum+a[i];
i=i-lowbit(i);
}
return sum;
}
int main()
{
int m,x,y;char s[10];
cin>>n>>m;
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
begin();
while(m--)
{
cin>>s>>x>>y;
if(s[0]=='A')
add(x,y);
else
cout<<query(y)-query(x-1)<<endl;
}
return 0;
}