#include <ctime>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long LL;
inline int read()
{
int x = 0; int v = 1, c;
while(c = getchar(), c < '0' || c > '9') if(c == '-') v = -1;
for(; c >= '0' && c <= '9'; c = getchar()) x = x * 10 + c - '0';
return x * v;
}
template<typename T> inline void write(T x, int ch = 10)
{
static int s[20]; int t = 0;
if(x < 0) x = -x, putchar('-');
if(x == 0) putchar('0');
for(s[t++] = ch; x; x /= 10)
s[t++] = x % 10 + '0';
while(t--) putchar(s[t]);
}
const int maxn = 100005;
int n, q, a[maxn];
LL sum[maxn << 2], add[maxn << 2];
#define lc o << 1
#define rc lc | 1
#define Lc lc, L, M
#define Rc rc, M + 1, R
inline void pushdown(int o, int L, int R)
{
if(add[o]) {
int M = (L + R) >> 1;
add[lc] += add[o]; sum[lc] += add[o] * (M - L + 1);
add[rc] += add[o]; sum[rc] += add[o] * (R - M);
add[o] = 0;
}
}
inline void maintain(int o)
{
sum[o] = sum[lc] + sum[rc];
}
void build(int o, int L, int R)
{
if(L == R) {
sum[o] = a[L];
} else {
int M = (L + R) >> 1;
build(Lc); build(Rc); maintain(o);
}
}
void update(int o, int L, int R, int ql, int qr, int v)
{
if(L == ql && qr == R) {
add[o] += v; sum[o] += (LL)v * (R - L + 1);
} else {
pushdown(o, L, R);
int M = (L + R) >> 1;
if(qr <= M) {
update(Lc, ql, qr, v);
} else if(M < ql) {
update(Rc, ql, qr, v);
} else {
update(Lc, ql, M, v);
update(Rc, M + 1, qr, v);
}
maintain(o);
}
}
LL query(int o, int L, int R, int ql, int qr)
{
if(L == ql && qr == R) {
return sum[o];
} else {
pushdown(o, L, R);
int M = (L + R) >> 1;
if(qr <= M) {
return query(Lc, ql, qr);
} else if(M < ql) {
return query(Rc, ql, qr);
} else {
return query(Lc, ql, M) + query(Rc, M + 1, qr);
}
}
}
void input()
{
n = read(); q = read();
for(int i = 1; i <= n; ++i)
a[i] = read();
build(1, 1, n);
}
void solve()
{
register int a, b;
register char op[2];
while(q--) {
scanf("%s", op);
a = read(), b = read();
if(op[0] == 'C') {
update(1, 1, n, a, b, read());
} else {
write(query(1, 1, n, a, b));
}
}
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
#endif
input();
solve();
#ifndef ONLINE_JUDGE
fclose(stdin), fclose(stdout);
printf("Run Time: %.3fs\n", (double)clock() / CLOCKS_PER_SEC);
#endif
return 0;
}
I2luY2x1ZGUgPGN0aW1lPgojaW5jbHVkZSA8Y3N0ZGlvPgojaW5jbHVkZSA8Y3N0cmluZz4KI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8YWxnb3JpdGhtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdHlwZWRlZiBsb25nIGxvbmcgTEw7CgppbmxpbmUgaW50IHJlYWQoKQp7CglpbnQgeCA9IDA7IGludCB2ID0gMSwgYzsKCXdoaWxlKGMgPSBnZXRjaGFyKCksIGMgPCAnMCcgfHwgYyA+ICc5JykgaWYoYyA9PSAnLScpIHYgPSAtMTsKCWZvcig7IGMgPj0gJzAnICYmIGMgPD0gJzknOyBjID0gZ2V0Y2hhcigpKSB4ID0geCAqIDEwICsgYyAtICcwJzsKCXJldHVybiB4ICogdjsKfQoKdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHZvaWQgd3JpdGUoVCB4LCBpbnQgY2ggPSAxMCkKewoJc3RhdGljIGludCBzWzIwXTsgaW50IHQgPSAwOwoJaWYoeCA8IDApIHggPSAteCwgcHV0Y2hhcignLScpOwoJaWYoeCA9PSAwKSBwdXRjaGFyKCcwJyk7Cglmb3Ioc1t0KytdID0gY2g7IHg7IHggLz0gMTApCgkJc1t0KytdID0geCAlIDEwICsgJzAnOwoJd2hpbGUodC0tKSBwdXRjaGFyKHNbdF0pOwp9Cgpjb25zdCBpbnQgbWF4biA9IDEwMDAwNTsKCmludCBuLCBxLCBhW21heG5dOwpMTCBzdW1bbWF4biA8PCAyXSwgYWRkW21heG4gPDwgMl07CgojZGVmaW5lIGxjIG8gPDwgMQojZGVmaW5lIHJjIGxjIHwgMQojZGVmaW5lIExjIGxjLCBMLCBNCiNkZWZpbmUgUmMgcmMsIE0gKyAxLCBSCgppbmxpbmUgdm9pZCBwdXNoZG93bihpbnQgbywgaW50IEwsIGludCBSKQp7CglpZihhZGRbb10pIHsKCQlpbnQgTSA9IChMICsgUikgPj4gMTsKCQlhZGRbbGNdICs9IGFkZFtvXTsgc3VtW2xjXSArPSBhZGRbb10gKiAoTSAtIEwgKyAxKTsKCQlhZGRbcmNdICs9IGFkZFtvXTsgc3VtW3JjXSArPSBhZGRbb10gKiAoUiAtIE0pOwoJCWFkZFtvXSA9IDA7Cgl9Cn0KCmlubGluZSB2b2lkIG1haW50YWluKGludCBvKQp7CglzdW1bb10gPSBzdW1bbGNdICsgc3VtW3JjXTsKfQoKdm9pZCBidWlsZChpbnQgbywgaW50IEwsIGludCBSKQp7CglpZihMID09IFIpIHsKCQlzdW1bb10gPSBhW0xdOwoJfSBlbHNlIHsKCQlpbnQgTSA9IChMICsgUikgPj4gMTsKCQlidWlsZChMYyk7IGJ1aWxkKFJjKTsgbWFpbnRhaW4obyk7Cgl9Cn0KCnZvaWQgdXBkYXRlKGludCBvLCBpbnQgTCwgaW50IFIsIGludCBxbCwgaW50IHFyLCBpbnQgdikKewoJaWYoTCA9PSBxbCAmJiBxciA9PSBSKSB7CgkJYWRkW29dICs9IHY7IHN1bVtvXSArPSAoTEwpdiAqIChSIC0gTCArIDEpOwoJfSBlbHNlIHsKCQlwdXNoZG93bihvLCBMLCBSKTsKCQlpbnQgTSA9IChMICsgUikgPj4gMTsKCQlpZihxciA8PSBNKSB7CgkJCXVwZGF0ZShMYywgcWwsIHFyLCB2KTsKCQl9IGVsc2UgaWYoTSA8IHFsKSB7CgkJCXVwZGF0ZShSYywgcWwsIHFyLCB2KTsKCQl9IGVsc2UgewoJCQl1cGRhdGUoTGMsIHFsLCBNLCB2KTsKCQkJdXBkYXRlKFJjLCBNICsgMSwgcXIsIHYpOwoJCX0KCQltYWludGFpbihvKTsKCX0KfQoKTEwgcXVlcnkoaW50IG8sIGludCBMLCBpbnQgUiwgaW50IHFsLCBpbnQgcXIpCnsKCWlmKEwgPT0gcWwgJiYgcXIgPT0gUikgewoJCXJldHVybiBzdW1bb107Cgl9IGVsc2UgewoJCXB1c2hkb3duKG8sIEwsIFIpOwoJCWludCBNID0gKEwgKyBSKSA+PiAxOwoJCWlmKHFyIDw9IE0pIHsKCQkJcmV0dXJuIHF1ZXJ5KExjLCBxbCwgcXIpOwoJCX0gZWxzZSBpZihNIDwgcWwpIHsKCQkJcmV0dXJuIHF1ZXJ5KFJjLCBxbCwgcXIpOwoJCX0gZWxzZSB7CgkJCXJldHVybiBxdWVyeShMYywgcWwsIE0pICsgcXVlcnkoUmMsIE0gKyAxLCBxcik7CgkJfQoJfQp9Cgp2b2lkIGlucHV0KCkKewoJbiA9IHJlYWQoKTsgcSA9IHJlYWQoKTsKCWZvcihpbnQgaSA9IDE7IGkgPD0gbjsgKytpKQoJCWFbaV0gPSByZWFkKCk7CglidWlsZCgxLCAxLCBuKTsKfQoKdm9pZCBzb2x2ZSgpCnsKCXJlZ2lzdGVyIGludCBhLCBiOwoJcmVnaXN0ZXIgY2hhciBvcFsyXTsKCXdoaWxlKHEtLSkgewoJCXNjYW5mKCIlcyIsIG9wKTsKCQlhID0gcmVhZCgpLCBiID0gcmVhZCgpOwoJCWlmKG9wWzBdID09ICdDJykgewoJCQl1cGRhdGUoMSwgMSwgbiwgYSwgYiwgcmVhZCgpKTsKCQl9IGVsc2UgewoJCQl3cml0ZShxdWVyeSgxLCAxLCBuLCBhLCBiKSk7CgkJfQoJfQp9CgppbnQgbWFpbigpCnsKI2lmbmRlZiBPTkxJTkVfSlVER0UKCWZyZW9wZW4oImlucHV0LnR4dCIsICJyIiwgc3RkaW4pOwoJZnJlb3Blbigib3V0cHV0LnR4dCIsICJ3Iiwgc3Rkb3V0KTsKI2VuZGlmCgkKCWlucHV0KCk7Cglzb2x2ZSgpOwoJCiNpZm5kZWYgT05MSU5FX0pVREdFCglmY2xvc2Uoc3RkaW4pLCBmY2xvc2Uoc3Rkb3V0KTsKCXByaW50ZigiUnVuIFRpbWU6ICUuM2ZzXG4iLCAoZG91YmxlKWNsb2NrKCkgLyBDTE9DS1NfUEVSX1NFQyk7CiNlbmRpZgoJcmV0dXJuIDA7Cn0K