#include <cstring> #include <cstdlib> #include <cstdio> #include <algorithm> using namespace std; typedef long long ll; ll num[50005]; char cmd[105]; struct node { ll l, r, sum; }a[200005]; void build(ll loc, ll l, ll r) { a[loc].l = l, a[loc].r = r; if(l == r)a[loc].sum = num[l]; else { ll mid = (l + r) / 2; build(loc * 2, l, mid); build(loc * 2 + 1, mid + 1, r); a[loc].sum = a[loc * 2].sum + a[loc * 2 + 1].sum; } return ; } void ad(ll loc, ll x, ll y) { ll l = a[loc].l, r = a[loc].r; if(l == r && l == x)a[loc].sum += y; else { ll mid = (l + r) / 2; if(x <= mid)ad(loc * 2, x, y); else ad(loc * 2 + 1, x, y); a[loc].sum = a[loc * 2].sum + a[loc * 2 + 1].sum; } return ; } ll qu(ll loc, ll L, ll R) { ll l = a[loc].l, r = a[loc].r; if(l == L && r == R)return a[loc].sum; else { int mid = (l + r) / 2; if(mid >= R)return qu(loc * 2, L, R); else if(mid < L)return qu(loc * 2 + 1, L, R); else { return qu(loc * 2, L, mid) + qu(loc * 2 + 1, mid + 1, R); } } } int main() { ll t, n, m, i, j, k, ca = 1, x, y; scanf("%lld", &t); while(t--) { scanf("%lld", &n); printf("Case %lld:\n", ca++); for(i = 1; i <= n; i++) { scanf("%lld", &num[i]); } build(1, 1, n); while(1) { scanf("%s", cmd); if(strcmp(cmd, "End") == 0)break; else if(strcmp(cmd, "Query") == 0) { scanf("%lld %lld", &x, &y); printf("%lld\n", qu(1, x, y)); } else if(strcmp(cmd, "Add") == 0) { scanf("%lld %lld", &x, &y); ad(1, x, y); } else { scanf("%lld %lld", &x, &y); ad(1, x, -y); } } } return 0; }