#include<cstdio>
using namespace std;
#define M 400009
typedef long long ll;
struct Node
{
int l,r;
ll sum,add;
}no[M];
ll a[100001];
ll build(int l,int r,int num)
{
no[num].l=l;
no[num].r=r;
no[num].add=0;
if(l==r)
{
no[num].sum=a[l];
return a[l];
}
ll i=build(l,(l+r)/2,num*2);
ll j=build((l+r)/2+1,r,num*2+1);
no[num].sum=i+j;
return i+j;
}
void insert(int l,int r,int p,int num)
{
if(l<=no[num].l&&r>=no[num].r)
{
no[num].add+=p;
no[num].sum+=p*(no[num].r - no[num].l + 1);
return ;
}
if(no[num].add!=0)
{
int ls=num*2,rs=num*2+1;
no[ls].add+=no[num].add;
no[ls].sum+=(no[ls].r - no[ls].l + 1 ) * no[num].add;
no[rs].add+=no[num].add;
no[rs].sum+=(no[rs].r - no[rs].l + 1 ) * no[num].add;
no[num].add=0;
}
int mid = (no[num].r + no[num].l) / 2;
if(l<=mid)
{
insert(l,r,p,num * 2);
}
if(r>mid)
{
insert(l,r,p,num * 2 + 1);
}
no[num].sum = no[num * 2].sum + no[num*2+1].sum;
}
ll search(int l,int r,int num)
{
if(l<=no[num].l&&r>=no[num].r)
{
return no[num].sum;
}
if(no[num].add!=0)
{
int ls=num*2,rs=num*2+1;
no[ls].add+=no[num].add;
no[ls].sum+=(no[ls].r - no[ls].l + 1 ) * no[num].add;
no[rs].add+=no[num].add;
no[rs].sum+=(no[rs].r - no[rs].l + 1 ) * no[num].add;
no[num].add=0;
}
int mid = (no[num].r + no[num].l) / 2;
ll i,j;
i=j=0;
if(l<=mid)
{
i=search(l,r,num * 2);
}
if(r>mid)
{
j=search(l,r,num * 2 + 1);
}
no[num].sum = no[num * 2].sum + no[num*2+1].sum;
return i+j;
}
int main()
{
int n,m,i,j;
while(~scanf("%d%d",&n,&m))
{
for(i=1;i<=n;i++)
{
scanf("%lld",a+i);
}
build(1,n,1);
char temp[10];
int l,r,p;
for(i=0;i<m;i++)
{
scanf("%s",temp);
if(temp[0]=='C')
{
scanf("%d%d%d",&l,&r,&p);
insert(l,r,p,1);
}
else
{
scanf("%d%d",&l,&r);
printf("%lld\n",search(l,r,1));
}
}
}
return 0;
}
using namespace std;
#define M 400009
typedef long long ll;
struct Node
{
int l,r;
ll sum,add;
}no[M];
ll a[100001];
ll build(int l,int r,int num)
{
no[num].l=l;
no[num].r=r;
no[num].add=0;
if(l==r)
{
no[num].sum=a[l];
return a[l];
}
ll i=build(l,(l+r)/2,num*2);
ll j=build((l+r)/2+1,r,num*2+1);
no[num].sum=i+j;
return i+j;
}
void insert(int l,int r,int p,int num)
{
if(l<=no[num].l&&r>=no[num].r)
{
no[num].add+=p;
no[num].sum+=p*(no[num].r - no[num].l + 1);
return ;
}
if(no[num].add!=0)
{
int ls=num*2,rs=num*2+1;
no[ls].add+=no[num].add;
no[ls].sum+=(no[ls].r - no[ls].l + 1 ) * no[num].add;
no[rs].add+=no[num].add;
no[rs].sum+=(no[rs].r - no[rs].l + 1 ) * no[num].add;
no[num].add=0;
}
int mid = (no[num].r + no[num].l) / 2;
if(l<=mid)
{
insert(l,r,p,num * 2);
}
if(r>mid)
{
insert(l,r,p,num * 2 + 1);
}
no[num].sum = no[num * 2].sum + no[num*2+1].sum;
}
ll search(int l,int r,int num)
{
if(l<=no[num].l&&r>=no[num].r)
{
return no[num].sum;
}
if(no[num].add!=0)
{
int ls=num*2,rs=num*2+1;
no[ls].add+=no[num].add;
no[ls].sum+=(no[ls].r - no[ls].l + 1 ) * no[num].add;
no[rs].add+=no[num].add;
no[rs].sum+=(no[rs].r - no[rs].l + 1 ) * no[num].add;
no[num].add=0;
}
int mid = (no[num].r + no[num].l) / 2;
ll i,j;
i=j=0;
if(l<=mid)
{
i=search(l,r,num * 2);
}
if(r>mid)
{
j=search(l,r,num * 2 + 1);
}
no[num].sum = no[num * 2].sum + no[num*2+1].sum;
return i+j;
}
int main()
{
int n,m,i,j;
while(~scanf("%d%d",&n,&m))
{
for(i=1;i<=n;i++)
{
scanf("%lld",a+i);
}
build(1,n,1);
char temp[10];
int l,r,p;
for(i=0;i<m;i++)
{
scanf("%s",temp);
if(temp[0]=='C')
{
scanf("%d%d%d",&l,&r,&p);
insert(l,r,p,1);
}
else
{
scanf("%d%d",&l,&r);
printf("%lld\n",search(l,r,1));
}
}
}
return 0;
}