#include<bits/stdc++.h>
using namespace std;
const int N=2e5+10;
int m,n,bb,cc,dd,tot,cnt;
char aa;
int root[N],a[N];
struct tree{
int sum,ls,rs,lz;
}t[N<<5];
void pushup(int u){
t[u].sum=t[t[u].ls].sum+t[t[u].rs].sum;
}
int build(int l,int r){
int u=++tot;
cout<<l<<' '<<r<<' '<<u<<' ';
if(l==r){
cout<<u<<' '<<l<<' '<<a[l]<<endl;
t[u].sum=a[l];
return u;
}
cout<<endl;
int mid=(l+r)/2;
t[u].ls=build(l,mid);
t[u].rs=build(mid+1,r);
pushup(u);
return u;
}
int add(int ed,int l,int r,int L,int R,int k){
int u=++tot;
t[u]=t[ed];
cout<<l<<' '<<r<<' '<<L<<' '<<R<<' '<<u<<' ';
t[u].sum+=(R-L+1)*k;
if(l>=L&&r<=R){
t[u].lz+=k;
cout<<t[u].lz<<endl;
return u;
}
cout<<endl;
int mid=(l+r)/2;
if(R<=mid) t[u].ls=add(t[ed].ls,l,mid,L,R,k);
else if(L>mid) t[u].rs=add(t[ed].rs,mid+1,r,L,R,k);
else{
add(t[ed].ls,l,mid,L,mid,k);
add(t[ed].rs,mid+1,r,mid+1,R,k);
}
return u;
}
int query(int u,int l,int r,int L,int R,int z){
cout<<l<<' '<<r<<' '<<L<<' '<<R<<' '<<z<<' '<<u<<' ';
if(l>=L&&r<=R){
cout<<t[u].sum+(r-l+1)*z<<endl;
return t[u].sum+(r-l+1)*z;
}
cout<<endl;
int mid=(l+r)/2;
if(R<=mid) return query(t[u].ls,l,mid,L,R,z+t[u].lz);
else if(L>mid) return query(t[u].rs,mid+1,r,L,R,z+t[u].lz);
else{
return query(t[u].ls,l,mid,L,mid,z+t[u].lz)+query(t[u].rs,mid+1,r,mid+1,R,z+t[u].lz);
}
}
int main(){
scanf("%lld%lld",&m,&n);
for(int i=1;i<=m;i++) scanf("%lld",&a[i]);
root[0]=build(1,m);
for(int i=1;i<=n;i++){
cin>>aa>>bb;
if(aa=='C'){
cin>>cc>>dd;
root[++cnt]=add(root[cnt-1],1,m,bb,cc,dd);
}
else if(aa=='Q'){
cin>>cc;
printf("%lld\n",query(root[cnt],1,m,bb,cc,0));
}
}
return 0;
}