#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <string>
#include <vector>
#include <algorithm>
#include <queue>
#include <functional>
#include <unordered_set>
#include <unordered_map>
#include <set>
#include <bitset>
using namespace std;
using ll = long long;
const int N = 1e5 + 100;
int n, m;
ll nums[N], tree[2][N];
inline int lowbit(int x) {
return x & (-x);
}
inline void add(int index, int x, int c) {
for (int i = x; i <= n; i += lowbit(i))
tree[index][i] += c;
}
inline ll ask(int index, int x) {
ll sum = 0;
for (int i = x; i; i -= lowbit(i)) {
sum += tree[index][i];
}
return sum;
}
int main() {
ios::sync_with_stdio(false);
cin >> n >> m;
for (int i = 1; i <= n; i++) {
cin >> nums[i];
nums[i] += nums[i - 1];// 前缀和
}
while (m--) {
int l, r, d;
char op;
cin >> op;
if (op == 'C') {
cin >> l >> r >> d;
add(0, l, d);
add(0, r + 1, -d);
add(1, l, l * d);
add(1, r + 1, -(r + 1) * d);
} else {
cin >> l >> r;
ll res = nums[r] + (r + 1) * ask(0, r) - ask(1, r);
res -= nums[l - 1] + l * ask(0, l - 1) - ask(1, l - 1);
cout << res << endl;
}
}
return 0;
}