/*
-----------
tr1[i]-bi的前缀和数组
tr2[i]-i*bi的前缀和数组
a[1~x] == (x+1) * b[1~x](即tr1[x]) - tr2[i]
-----------
int lowbit(int x);
void add(LL tr[], int x, LL c);
LL sum(LL tr[], int x);
LL prefix_sum(int x);
*/
#include<iostream>
#include<cstring>
#include<algorithm>
typedef long long LL;
using namespace std;
const int N = 1e5+10;
int n, m;
LL a[N], tr1[N], tr2[N];
int lowbit(int x) {
return x & -x;
}
void add(LL tr[], int x, LL c) {
for(int i = x; i <= n; i += lowbit(i)) tr[i] += c;
}
LL sum(LL tr[], int x) {
LL res = 0;
for(int i = x; i; i -= lowbit(i)) res += tr[i];
return res;
}
LL prefix_sum(int x) {
return sum(tr1, x) * (x + 1) - sum(tr2, x);
}
int main() {
cin >> n >> m;
for(int i = 1; i <= n; i++)
cin >> a[i];
for(int i = 1; i <= n; i++) {
int b = a[i] - a[i-1];
add(tr1, i, b);
add(tr2, i, (LL)b*i);
}
while(m--) {
char op[2];
int l, r, d;
cin >> op;
if(op[0] == 'Q') {
cin >> l >> r;
cout << prefix_sum(r) - prefix_sum(l-1) << endl;
} else {
cin >> l >> r >> d;
add(tr1, l, d), add(tr2, l, l * d);
add(tr1, r+1, -d), add(tr2, r+1, (r+1) * -d);
}
}
return 0;
}