士兵杀敌(二)
单点修改,区间查询。
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+5;
int ql,qr,w;
int add[maxn*4];
void build(int o,int l,int r){
if(l==r){
scanf("%d",&add[o]);
return ;
}
int m=(l+r)>>1;
build(o*2,l,m);
build(o*2+1,m+1,r);
add[o]=add[o*2]+add[o*2+1];
}
int qu(int o,int l,int r){
if(ql<=l&&qr>=r)
return add[o];
int m=(l+r)>>1;
int ans=0;
if(ql>m)
ans+=qu(o*2+1,m+1,r);
else if(qr<=m)
ans+=qu(o*2,l,m);
else{
ans+=qu(o*2,l,m);
ans+=qu(o*2+1,m+1,r);
}
return ans;
}
void up(int o,int l,int r){
add[o]+=w;
if(l==r)
return;
int m=(l+r)>>1;
if(ql>m)
up(o*2+1,m+1,r);
if(qr<=m)
up(o*2,l,m);
}
int main(){
int n,m;
scanf("%d%d",&n,&m);
build(1,1,n);
char s[10];
while(m--){
scanf("%s",s);
if(s[0]=='Q'){
scanf("%d%d",&ql,&qr);
printf("%d\n",qu(1,1,n));
}
else{
scanf("%d%d",&ql,&w);
qr=ql;
up(1,1,n);
}
}
}