1 #include<cstdio>
2 #include<algorithm>
3 #include<cstring>
4 typedef long long ll;
5 #define N 100010
6 using namespace std;
7 struct node
8 {
9 ll l,r,lz,sum;
10 }t[4*N];
11 ll read()
12 {
13 ll ret=0,neg=1;
14 char j=getchar();
15 for (;j>'9' || j<'0';j=getchar())
16 if (j=='-') neg=-1;
17 for (;j<='9' && j>='0';j=getchar())
18 ret=ret*10+j-'0';
19 return ret*neg;
20 }
21 ll n,q,a[N],l,r,k;
22 void pushup(ll p)
23 {
24 t[p].sum=t[2*p].sum+t[2*p+1].sum;
25 }
26 void pushdown(ll p)
27 {
28 if (t[p].l==t[p].r || t[p].lz==0) return;
29 ll tmp=t[p].lz,mid=(t[p].r+t[p].l)>>1;
30 t[2*p].sum+=(mid-t[p].l+1)*tmp;
31 t[2*p+1].sum+=(t[p].r-mid)*tmp;
32 t[2*p].lz+=tmp;
33 t[2*p+1].lz+=tmp;
34 t[p].lz=0;
35 }
36 void build(ll p,ll l,ll r)
37 {
38 t[p].l=l,t[p].r=r;
39 if (l!=r)
40 {
41 ll mid=l+r>>1;
42 build(2*p,l,mid);
43 build(2*p+1,mid+1,r);
44 pushup(p);
45 }
46 else
47 t[p].sum=a[l];
48 }
49 void modify(ll p,ll l,ll r,ll k)
50 {
51 ll L=t[p].l,R=t[p].r,mid=(L+R)>>1;
52 if (l==L && r==R)
53 {
54 t[p].sum+=(r-l+1)*k;
55 t[p].lz+=k;
56 return ;
57 }
58 pushdown(p);
59 if (r<=mid)
60 modify(2*p,l,r,k);
61 else if (l>mid)
62 modify(2*p+1,l,r,k);
63 else modify(2*p,l,mid,k),modify(2*p+1,mid+1,r,k);
64 pushup(p);
65 }
66 ll query(ll p,ll l,ll r)
67 {
68 ll L=t[p].l,R=t[p].r,mid=(L+R)>>1;
69 if (l==L && r==R)
70 return t[p].sum;
71 pushdown(p);
72 if (r<=mid)
73 return query(2*p,l,r);
74 if (l>mid) return query(2*p+1,l,r);
75 return query(2*p,l,mid)+query(2*p+1,mid+1,r);
76 }
77 char op[N];
78 int main()
79 {
80 n=read(),q=read();
81 for (int i=1;i<=n;i++)
82 a[i]=read();
83 build(1,1,n);
84 while (q--)
85 {
86 scanf("%s",op);
87 if (op[0]=='Q')
88 l=read(),r=read(),printf("%lld\n",query(1,l,r));
89 else l=read(),r=read(),k=read(),modify(1,l,r,k);
90 }
91 return 0;
92 }