#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
#include <math.h>
#define mem(a) memset(a,0,sizeof(a))
#define L(u) (u<<1)
#define R(u) (u<<1|1)
using namespace std;
const int maxn =
50009;
struct Nodes
{
int l,r;
int sum;
} node[maxn<<
2];
int A[maxn];
void Pushup(
int u)
{
node[u].sum = node[L(u)].sum + node[R(u)].sum;
return ;
}
void Build (
int u,
int left,
int right)
{
node[u].l = left,node[u].r = right;
if (node[u].l == node[u].r)
{
node[u].sum = A[left];
return ;
}
int mid = (node[u].l + node[u].r)>>
1;
Build (L(u),left,mid);
Build (R(u),mid+
1,right);
Pushup(u);
}
void Update(
int u,
int pos,
int val)
{
if (node[u].l==node[u].r)
{
node[u].sum += val;
return ;
}
int mid = (node[u].l + node[u].r)>>
1;
if (pos <= mid) Update(L(u),pos,val);
else Update(R(u),pos,val);
Pushup(u);
}
int Query(
int u,
int left,
int right)
{
if (left <= node[u].l&&node[u].r <= right)
return node[u].sum;
int mid = (node[u].l + node[u].r)>>
1;
if (right <= mid)
return Query(L(u),left,right);
else if (left > mid)
return Query(R(u),left,right);
else return (Query(L(u),left,mid) + Query(R(u),mid+
1,right));
Pushup(u);
}
int main ()
{
#ifndef ONLINE_JUDGE
freopen(
"1",
"r",stdin);
#endif
ios_base::sync_with_stdio(
false);
cin.tie(
0);
int T,n,m,t,i,x,add,a,b;
char s[
10];
scanf(
"%d",&T);
for(t =
1; t <= T; t++)
{
scanf(
"%d",&n);
printf(
"Case %d:\n",t);
for(i =
1; i <= n; i ++)
{
scanf(
"%d",&A[i]);
}
Build(
1,
1,n);
while(
1)
{
scanf(
"%s",s);
if(
strcmp(s,
"Add") ==
0)
{
scanf(
"%d%d",&x,&add);
Update(
1,x,add);
}
else if(
strcmp(s,
"Sub") ==
0)
{
scanf(
"%d%d",&x,&add);
Update(
1,x,-add);
}
else if(
strcmp(s,
"Query" ) ==
0)
{
scanf(
"%d%d",&a,&b);
printf(
"%d\n",Query(
1,a,b));
}
else
{
break;
}
}
}
return 0;
}