题解
练练树状数组。
#include <iostream>
#include <cstdio>
#include <string>
#include <algorithm>
using namespace std;
const int maxn = 1000000 + 10;
int a[maxn], c[maxn];
int n, m;
int lowbit(int x) { return x & -x; }
int sum(int x)
{
int s = 0;
for(int i = x; i; i -= lowbit(i)) s += c[i];
return s;
}
void add(int x, int v)
{
for(int i = x; i <= n; i += lowbit(i)) c[i] += v;
}
int main()
{
#ifdef LOCAL
freopen("data.in", "r", stdin);
#endif
scanf("%d %d", &n, &m);
for(int i = 1; i <= n; ++i){
scanf("%d", a + i);
add(i, a[i]);
}
char op[6];
int a, b;
while(m--)
{
scanf("%s %d %d", op, &a, &b);
if(op[0] == 'Q') printf("%d\n", sum(b) - sum(a - 1));
else add(a, b);
}
return 0;
}