//follows o base indexing for array and 1 base for segtree
#include<bits/stdc++.h>
#include<algorithm>
#define mod 1000000007
#define lp(i,n) for(int i=0;i<n;i++)
using namespace std;
typedef long long ll;
typedef long int li;
const int MAX=200000+1;
ll Ltree[4*MAX];//for (-1)^(i)*A[i]*(i+1)
ll Stree[4*MAX];// for (-1)^(i)*A[i]
void build(int node,int l,int r,int tree[],int arr[]){
if(l==r)
tree[node]=arr[l];
else{
int mid=(l+r)>>1;
build(2*node,l,mid,tree,arr);
build(2*node+1,mid+1,r,tree,arr);
tree[node]=tree[2*node]+tree[2*node+1];
}
}
void update(int node,int l,int r,int tree[],int arr[],int idx,int val){
if(l==r){
tree[node]=val;
arr[idx]=val;
}
else{
int mid=(l+r)>>1;
if(idx>=l&&idx<=mid){update(2*node,l,mid,tree,arr,idx,val);}
else update(2*node+1,mid+1,r,tree,arr,idx,val);
tree[node]=tree[2*node]+tree[2*node+1];
}
}
ll querry(int node,int l,int r,int ql,int qr,int tree[],int arr[] ){
if(qr<l || ql>r)return 0;
if(ql<=l&& r<=qr)return tree[node];
int mid=(l+r)/2;
ll left=querry(2*node,l,mid,ql,qr,tree,arr);
ll right=querry(2*node+1,mid+1,r,ql,qr,tree,arr);
return (left+right);
}
int main()
{ ios_base::sync_with_stdio(false);
cin.tie(NULL);
int t,k=1;
cin>>t;
while(t--){
int n,q,i;
cin>>n>>q;
int larr[n];
int arr[n];
lp(i,n){
cin>>arr[i];
arr[i]=pow(-1,i%2)*arr[i];
larr[i]=arr[i]*(i+1);
}
build(1,0,n-1,Ltree,larr);
build(1,0,n-1,Stree,arr);
ll finalans=0;
while(q--){
char type;
cin>>type;
if(type=='Q'){
ll ans=0;
int l,r;
cin>>l>>r;
--l;--r;
ans=pow(-1,l%2)*(querry(1,0,n-1,l,r,Ltree,larr) -l*querry(1,0,n-1,l,r,Stree,arr));
finalans+=ans;
}
else
{
int idx,val;
cin>>idx>>val;
--idx;
val=pow(-1,idx%2)*val;
update(1,0,n-1,Ltree,larr,idx,val*(idx+1));
update(1,0,n-1,Stree,arr,idx,val);
}
}
cout <<"Case #"<<k<<": "<<finalans<<endl;
k++;
memset(Ltree,0,sizeof(Ltree));
memset(Stree,0,sizeof(Stree));
}
return 0;
}
ICAgLy9mb2xsb3dzIG8gYmFzZSBpbmRleGluZyBmb3IgYXJyYXkgYW5kIDEgYmFzZSBmb3Igc2VndHJlZQogICAgI2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KICAgICNpbmNsdWRlPGFsZ29yaXRobT4KICAgICNkZWZpbmUgbW9kIDEwMDAwMDAwMDcKICAgICNkZWZpbmUgbHAoaSxuKSBmb3IoaW50IGk9MDtpPG47aSsrKQogICAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKICAgIHR5cGVkZWYgbG9uZyBsb25nIGxsOwogICAgdHlwZWRlZiBsb25nIGludCBsaTsKICAgIGNvbnN0IGludCBNQVg9MjAwMDAwKzE7CiAgICBsbCAgTHRyZWVbNCpNQVhdOy8vZm9yICgtMSleKGkpKkFbaV0qKGkrMSkKICAgIGxsIFN0cmVlWzQqTUFYXTsvLyBmb3IgKC0xKV4oaSkqQVtpXQogICAgCiAgICB2b2lkIGJ1aWxkKGludCBub2RlLGludCBsLGludCByLGludCB0cmVlW10saW50IGFycltdKXsKICAgICAgaWYobD09cikKICAgICAgICAgdHJlZVtub2RlXT1hcnJbbF07CiAgICAgICBlbHNlewogICAgICAgICBpbnQgbWlkPShsK3IpPj4xOwogICAgICAgICBidWlsZCgyKm5vZGUsbCxtaWQsdHJlZSxhcnIpOwogICAgICAgICBidWlsZCgyKm5vZGUrMSxtaWQrMSxyLHRyZWUsYXJyKTsKICAgICAgICAgdHJlZVtub2RlXT10cmVlWzIqbm9kZV0rdHJlZVsyKm5vZGUrMV07CiAgICAgICB9CiAgICB9CiAgIHZvaWQgdXBkYXRlKGludCBub2RlLGludCBsLGludCByLGludCB0cmVlW10saW50IGFycltdLGludCBpZHgsaW50IHZhbCl7CiAgICAgaWYobD09cil7CiAgICAgICAgICB0cmVlW25vZGVdPXZhbDsKICAgICAgICAgIGFycltpZHhdPXZhbDsKICAgICAgICB9CiAgICAgZWxzZXsKICAgICAgIGludCBtaWQ9KGwrcik+PjE7CiAgICAgICBpZihpZHg+PWwmJmlkeDw9bWlkKXt1cGRhdGUoMipub2RlLGwsbWlkLHRyZWUsYXJyLGlkeCx2YWwpO30KICAgICAgIGVsc2UgdXBkYXRlKDIqbm9kZSsxLG1pZCsxLHIsdHJlZSxhcnIsaWR4LHZhbCk7CiAgICAgICAgCiAgICAgdHJlZVtub2RlXT10cmVlWzIqbm9kZV0rdHJlZVsyKm5vZGUrMV07CiAgIH0KICB9CiAgIGxsIHF1ZXJyeShpbnQgbm9kZSxpbnQgbCxpbnQgcixpbnQgcWwsaW50IHFyLGludCB0cmVlW10saW50IGFycltdICl7CiAgICAgaWYocXI8bCB8fCBxbD5yKXJldHVybiAwOwogICAgIGlmKHFsPD1sJiYgcjw9cXIpcmV0dXJuIHRyZWVbbm9kZV07CiAgICAgaW50IG1pZD0obCtyKS8yOwogICAgIGxsIGxlZnQ9cXVlcnJ5KDIqbm9kZSxsLG1pZCxxbCxxcix0cmVlLGFycik7CiAgICAgbGwgcmlnaHQ9cXVlcnJ5KDIqbm9kZSsxLG1pZCsxLHIscWwscXIsdHJlZSxhcnIpOwogICAgIHJldHVybiAobGVmdCtyaWdodCk7CiAgIH0KCiAgIAogICAgaW50IG1haW4oKQogICAgeyAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwogICAgICAgIGNpbi50aWUoTlVMTCk7CiAgICAgICAgaW50IHQsaz0xOwogICAgICAgIGNpbj4+dDsKICAgICAgICB3aGlsZSh0LS0pewogICAgICAgICAgaW50IG4scSxpOwogICAgICAgICAgY2luPj5uPj5xOwogICAgICAgICAgaW50IGxhcnJbbl07CiAgICAgICAgICBpbnQgYXJyW25dOwogICAgICAgICAgbHAoaSxuKXsKICAgICAgICAgICAgY2luPj5hcnJbaV07CiAgICAgICAgICAgIGFycltpXT1wb3coLTEsaSUyKSphcnJbaV07CiAgICAgICAgICAgIGxhcnJbaV09YXJyW2ldKihpKzEpOwogICAgICAgICAgfQogICAgICAgICAgYnVpbGQoMSwwLG4tMSxMdHJlZSxsYXJyKTsKICAgICAgICAgIGJ1aWxkKDEsMCxuLTEsU3RyZWUsYXJyKTsKICAgICAgICAgIGxsIGZpbmFsYW5zPTA7CiAgICAgICAgICB3aGlsZShxLS0pewogICAgICAgICAgICBjaGFyIHR5cGU7CiAgICAgICAgICAgIGNpbj4+dHlwZTsKICAgICAgICAgICAgaWYodHlwZT09J1EnKXsKICAgICAgICAgICAgbGwgYW5zPTA7CiAgICAgICAgICAgICAgaW50IGwscjsKICAgICAgICAgICAgICBjaW4+Pmw+PnI7CiAgICAgICAgICAgICAgLS1sOy0tcjsKICAgICAgICAgICAgICBhbnM9cG93KC0xLGwlMikqKHF1ZXJyeSgxLDAsbi0xLGwscixMdHJlZSxsYXJyKSAtbCpxdWVycnkoMSwwLG4tMSxsLHIsU3RyZWUsYXJyKSk7CiAgICAgICAgICAgICAgZmluYWxhbnMrPWFuczsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpbnQgaWR4LHZhbDsKICAgICAgICAgICAgICBjaW4+PmlkeD4+dmFsOwogICAgICAgICAgICAgIC0taWR4OwogICAgICAgICAgICAgIHZhbD1wb3coLTEsaWR4JTIpKnZhbDsKICAgICAgICAgICAgICB1cGRhdGUoMSwwLG4tMSxMdHJlZSxsYXJyLGlkeCx2YWwqKGlkeCsxKSk7CiAgICAgICAgICAgICAgdXBkYXRlKDEsMCxuLTEsU3RyZWUsYXJyLGlkeCx2YWwpOwogICAgICAgICAgICB9CiAgICAgICAgICB9ICAKICAgIGNvdXQgPDwiQ2FzZSAjIjw8azw8IjogIjw8ZmluYWxhbnM8PGVuZGw7CiAgICBrKys7CiAgICBtZW1zZXQoTHRyZWUsMCxzaXplb2YoTHRyZWUpKTsKICAgIG1lbXNldChTdHJlZSwwLHNpemVvZihTdHJlZSkpOwogICAgICAgICAgCiAgICAgICAgfQogICAgICAgIHJldHVybiAwOwogICAgfQoK
prog.cpp: In function ‘int main()’:
prog.cpp:61:25: error: cannot convert ‘ll*’ {aka ‘long long int*’} to ‘int*’
build(1,0,n-1,Ltree,larr);
^~~~~
prog.cpp:13:41: note: initializing argument 4 of ‘void build(int, int, int, int*, int*)’
void build(int node,int l,int r,int tree[],int arr[]){
~~~~^~~~~~
prog.cpp:62:25: error: cannot convert ‘ll*’ {aka ‘long long int*’} to ‘int*’
build(1,0,n-1,Stree,arr);
^~~~~
prog.cpp:13:41: note: initializing argument 4 of ‘void build(int, int, int, int*, int*)’
void build(int node,int l,int r,int tree[],int arr[]){
~~~~^~~~~~
prog.cpp:72:51: error: cannot convert ‘ll*’ {aka ‘long long int*’} to ‘int*’
ans=pow(-1,l%2)*(querry(1,0,n-1,l,r,Ltree,larr) -l*querry(1,0,n-1,l,r,Stree,arr));
^~~~~
prog.cpp:36:53: note: initializing argument 6 of ‘ll querry(int, int, int, int, int, int*, int*)’
ll querry(int node,int l,int r,int ql,int qr,int tree[],int arr[] ){
~~~~^~~~~~
prog.cpp:72:85: error: cannot convert ‘ll*’ {aka ‘long long int*’} to ‘int*’
ans=pow(-1,l%2)*(querry(1,0,n-1,l,r,Ltree,larr) -l*querry(1,0,n-1,l,r,Stree,arr));
^~~~~
prog.cpp:36:53: note: initializing argument 6 of ‘ll querry(int, int, int, int, int, int*, int*)’
ll querry(int node,int l,int r,int ql,int qr,int tree[],int arr[] ){
~~~~^~~~~~
prog.cpp:81:30: error: cannot convert ‘ll*’ {aka ‘long long int*’} to ‘int*’
update(1,0,n-1,Ltree,larr,idx,val*(idx+1));
^~~~~
prog.cpp:23:41: note: initializing argument 4 of ‘void update(int, int, int, int*, int*, int, int)’
void update(int node,int l,int r,int tree[],int arr[],int idx,int val){
~~~~^~~~~~
prog.cpp:82:30: error: cannot convert ‘ll*’ {aka ‘long long int*’} to ‘int*’
update(1,0,n-1,Stree,arr,idx,val);
^~~~~
prog.cpp:23:41: note: initializing argument 4 of ‘void update(int, int, int, int*, int*, int, int)’
void update(int node,int l,int r,int tree[],int arr[],int idx,int val){
~~~~^~~~~~