传送门:点我传送
使用树状数组求解;
#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; }