#include
<
stdio.h
>
#include
<
string
.h
>
struct
data
{
int
l,r,val;
}st[
200009
];
void
build(
int
ll,
int
rr,
int
n)
{
st[n].l
=
ll;
st[n].r
=
rr;
st[n].val
=
0
;
if
(ll
==
rr)
return
;
int
mid
=
(ll
+
rr)
/
2
;
build(ll,mid,
2
*
n);
build(mid
+
1
,rr,
2
*
n
+
1
);
}
void
updata(
int
ll,
int
rr,
int
a,
int
n,
char
c)
//
{
if
(st[n].l
==
ll
&&
st[n].r
==
rr)
{
if
(c
==
'
+
'
)
st[n].val
+=
a;
else
st[n].val
-=
a;
return
;
}
if
(c
==
'
+
'
)
st[n].val
+=
a;
else
st[n].val
-=
a;
int
mid
=
(st[n].l
+
st[n].r)
/
2
;
if
(rr
<=
mid)
{
updata(ll,rr,a,
2
*
n,c);
}
else
if
(ll
>=
mid
+
1
) updata(ll,rr,a,
2
*
n
+
1
,c);
else
{
updata(ll,mid,a,
2
*
n,c);
updata(mid
+
1
,rr,a,
2
*
n
+
1
,c);
}
}
int
search(
int
ll,
int
rr,
int
n)
{
if
(st[n].l
==
ll
&&
st[n].r
==
rr)
return
st[n].val;
int
mid
=
(st[n].l
+
st[n].r)
/
2
;
if
(rr
<=
mid)
return
search(ll,rr,
2
*
n);
else
if
(ll
>=
mid
+
1
)
return
search(ll,rr,
2
*
n
+
1
);
else
{
return
search(ll,mid,
2
*
n)
+
search(mid
+
1
,rr,
2
*
n
+
1
);
}
}
int
main()
{
int
t;
scanf(
"
%d
"
,
&
t);
int
cc
=
1
;
while
(t
--
)
{
printf(
"
Case %d:\n
"
,cc);
cc
++
;
int
n;
scanf(
"
%d
"
,
&
n);
int
i;
build(
1
,n,
1
);
for
(i
=
1
;i
<=
n;i
++
)
{
int
temp;
scanf(
"
%d
"
,
&
temp);
updata(i,i,temp,
1
,
'
+
'
);
}
getchar();
char
ss[
10
];
while
(
1
)
{
scanf(
"
%s
"
,ss);
getchar();
if
(strcmp(ss,
"
Query
"
)
==
0
)
{
int
ll,rr;
scanf(
"
%d%d
"
,
&
ll,
&
rr);
printf(
"
%d\n
"
,search(ll,rr,
1
));
}
else
if
(strcmp(ss,
"
Add
"
)
==
0
)
{
int
no,addv;
scanf(
"
%d%d
"
,
&
no,
&
addv);
updata(no,no,addv,
1
,
'
+
'
);
}
else
if
(strcmp(ss,
"
Sub
"
)
==
0
)
{
int
no,addv;
scanf(
"
%d%d
"
,
&
no,
&
addv);
updata(no,no,addv,
1
,
'
-
'
);
}
else
{
break
;
}
}
}
return
0
;
}