题目:
AC情况:
思路:树状数组
#include<iostream>
#include<string>
#include<bits/stdc++.h>
using namespace std;
int a[1000002];
int d[1000002] = {0};
int N, M;
int lowbit(int x) {
return x&(-x);
}
void update(int x,int num) {
while (x <= N) {
d[x] += num;
x += lowbit(x);
}
}
int getSum(int x) {
int s=0;
while (x > 0) {
s += d[x];
x -= lowbit(x);
}
return s;
}
int main(){
char str[10];
int pa, pb,i,j;
scanf("%d %d", &N, &M);
for (i = 1; i <= N; i++) {
scanf("%d", &a[i]);
for (j = i - lowbit(i) + 1; j <= i; j++) {
d[i] += a[j];
}
}
for (i = 0; i < M; i++) {
scanf("%s %d %d", str, &pa, &pb);
if (str[0] == 'Q') {
printf("%d\n",getSum(pb) - getSum(pa-1));
}
if (str[0] == 'A') {
update(pa, pb);
}
}
return 0;
}