#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
char s[10];
int t[50010], a[50010], n, T;
int lowbit(int x) {
return x & (- x);
}
void add(int x, int pos) {
while(pos <= n) {
t[pos] += x;
pos += lowbit(pos);
}
}
int find(int x) {
int ans = 0;
while(x) {
ans += t[x];
x -= lowbit(x);
}
return ans;
}
void init(int x) {
printf("Case %d:\n", x);
memset(t, 0, sizeof(t));
}
int main() {
scanf("%d", &T);
for(int k = 1; k <= T; k ++) {
init(k);
scanf("%d", &n);
for(int i = 1; i <= n; i ++)
scanf("%d", &a[i]), add(a[i], i);
int i, j;
while(scanf("%s", s) && s[0] != 'E') {
if(s[0] == 'A') {
scanf("%d %d", &i, &j);
add(j, i);
}
else if(s[0] == 'S') {
scanf("%d %d", &i, &j);
add(-j, i);
}
else {
scanf("%d %d", &i, &j);
printf("%d\n", find(j) - find(i - 1));
}
}
}
return 0;
}
【NOIP模板】 树状数组
最新推荐文章于 2018-07-21 09:32:00 发布