题目大意:中文题意

解题思路:模版题

#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;
}