#include <bits/stdc++.h>
using namespace std;
#define lowbit(x) (x)&-(x)
int n,m;
int c[500005];
void update(int x,int t){
for(int i=x;i<=n;i+= lowbit(i)){
c[i]+=t;
}
}
int query(int x){
int sum=0;
for(int i=x;i;i-= lowbit(i)){
sum+=c[i];
}
return sum;
}
void solve(){
cin>>n>>m;
int arr[500005]={0};
for(int i=1;i<=n;i++){
cin>>arr[i];
}
while(m--){
int op;
cin>>op;
if(op==1){
int x,y,k;
cin>>x>>y>>k;
update(x,k);
update(y+1,-k);
}
else{
int x;
cin>>x;
cout<<arr[x]+query(x)<<"\n";
}
}
}
int main() {
ios::sync_with_stdio(false),cin.tie(nullptr),cout.tie(nullptr);
solve();
return 0;
}
#include <bits/stdc++.h>
using namespace std;
#define lowbit(x) (x) & -(x) //区间修改,区间查询
#define int long long
const int N=100005;
int n,m,arr[N],presum[N],c0[N],c1[N];
void update(int c[],int x,int t){
for(int i=x;i<=n;i+= lowbit(i)){
c[i]+=t;
}
}
int query(int c[],int x){
int ret=0;
for(int i=x;i;i-= lowbit(i)){
ret+=c[i];
}
return ret;
}
void solve(){
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>arr[i];
presum[i]+=presum[i-1]+arr[i];
}
while(m--){
char op;
cin>>op;
if(op=='C'){
int l,r,d;
cin>>l>>r>>d;
update(c0,l,d), update(c0,r+1,-d);
update(c1,l,l*d), update(c1,r+1,-(r+1)*d);
}
else{
int l,r; //[1,r]-[1,l-1]
cin>>l>>r;
int ans=( presum[r]+ (r+1)*query(c0,r)- query(c1,r) )-
( presum[l-1]+(l-1+1)*query(c0,l-1)- query(c1,l-1) );
cout<<ans<<"\n";
}
}
}
signed main() {
solve();
return 0;
}