1 #include<cstdio>
2 #include<iostream>
3 #include<cstring>
4 #include<algorithm>
5 #define lson l,m,rt<<1
6 #define rson m+1,r,rt<<1|1
7 #define INF 0x7fffffff
8 #define maxn 101000
9 #define LL long long
10 using namespace std;
11 LL sum[maxn<<2];
12 int add[maxn<<2],n,Q,u,v,w,m;
13 void pushup(int rt){
14 sum[rt]=sum[rt<<1]+sum[rt<<1|1];
15 }
16 void pushdown(int rt,int m){
17 if(add[rt]){
18 add[rt<<1]+=add[rt];
19 add[rt<<1|1]+=add[rt];
20 sum[rt<<1]+=(LL)add[rt]*(m-(m>>1));
21 sum[rt<<1|1]+=(LL)add[rt]*(m>>1);
22 add[rt]=0;
23 }
24 }
25 void build(int l,int r,int rt){
26 add[rt]=0;
27 if(l==r){
28 scanf("%lld",&sum[rt]);
29 return;
30 }
31 int m=(l+r)>>1;
32 build(lson);
33 build(rson);
34 pushup(rt);
35 }
36 void update(int L,int R,int c,int l,int r,int rt){
37 if(l>=L&&r<=R){
38 add[rt]+=c;
39 sum[rt]+=(LL)c*(r-l+1);
40 return ;
41 }
42 pushdown(rt,r-l+1);
43 int m=(l+r)>>1;
44 if(L<=m)update(L,R,c,lson);
45 if(R>m)update(L,R,c,rson);
46 pushup(rt);
47 }
48 LL Query(int L,int R,int l,int r,int rt){
49 if(l>=L&&r<=R){
50 return sum[rt];
51 }
52 pushdown(rt,r-l+1);
53 LL res=0;
54 int m=(l+r)>>1;
55 if(L<=m) res+=Query(L,R,lson);
56 if(R>m) res+=Query(L,R,rson);
57 return res;
58 }
59 int main(){
60 cin>>n>>Q;
61 build(1,n,1);
62 char opt[20];
63 for(int i=1;i<=Q;i++){
64 cin>>opt;
65 if(opt[0]=='C'){
66 scanf("%d%d%d",&u,&v,&w);
67 update(u,v,w,1,n,1);
68 }
69 else{
70 scanf("%d%d",&u,&v);
71 cout<<Query(u,v,1,n,1)<<endl;
72 }
73 }
74 return 0;
75 }