题目大意:中文题意
解题思路:模版题
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 50010 << 2;
int val[N], sum[N];
int n;
void build(int u, int l, int r) {
if (l == r) {
sum[u] = val[l];
return ;
}
int mid = (l + r) / 2;
build(2 * u, l, mid);
build(2 * u + 1, mid + 1, r);
sum[u] = sum[2 * u] + sum[2 * u + 1];
}
void init() {
scanf("%d", &n);
for (int i = 1; i <= n; i++)
scanf("%d", &val[i]);
build(1, 1, n);
}
void add(int u, int l, int r, int L, int R, int c) {
if (L <= l && r <= R) {
sum[u] += (r - l + 1) * c;
return ;
}
int mid = (l + r) >> 1;
if (L <= mid) add(2 * u, l, mid, L, R, c);
if (R > mid) add(2 * u + 1, mid + 1, r, L, R, c);
sum[u] = sum[2 * u] + sum[2 * u + 1];
}
int query(int u, int l, int r, int L, int R) {
if (L <= l && r <= R) return sum[u];
int mid = (l + r) >> 1;
int ans = 0;
if (L <= mid) ans += query(2 * u, l, mid, L, R);
if (R > mid) ans += query(2 * u + 1, mid + 1, r, L, R);
return ans;
}
int cas = 1;
void solve() {
printf("Case %d:\n", cas++);
char op[20];
int a, b;
while (scanf("%s", op) && op[0] != 'E') {
if (op[0] == 'A' || op[0] == 'S') {
scanf("%d%d", &a, &b);
if (op[0] == 'S') b = -b;
add(1, 1, n, a, a, b);
}
else if (op[0] == 'Q') {
scanf("%d%d", &a, &b);
printf("%d\n", query(1, 1, n, a, b));
}
}
}
int main() {
int test;
scanf("%d", &test);
while (test--) {
init();
solve();
}
return 0;
}