#include<cstdio> using namespace std; const int N=1e6+10; typedef long long ll; ll sum[N*4],lazy[N*4],len[N*4]; int n,m; void build(int id,int l,int r) { len[id]=r-l+1; if(l==r) { scanf("%lld",&sum[id]); return ; } int mid=(l+r)>>1; build(id<<1,l,mid); build(id<<1|1,mid+1,r); sum[id]=sum[id<<1]+sum[id<<1|1]; } void pushdown(int id) { if(lazy[id]) { lazy[id<<1]+=lazy[id]; lazy[id<<1|1]+=lazy[id]; sum[id<<1]+=len[id<<1]*lazy[id]; sum[id<<1|1]+=len[id<<1|1]*lazy[id]; lazy[id]=0; } } ll qu(int id,int l,int r,int ql,int qr) { if(ql<=l&&r<=qr) { return sum[id]; } pushdown(id); int mid=(l+r)>>1; ll ans=0; if(ql<=mid) ans+=qu(id<<1,l,mid,ql,qr); if(qr>mid) ans+=qu(id<<1|1,mid+1,r,ql,qr); return ans; } void up(int id,int l,int r,int ql,int qr,ll val) { if(ql<=l&&r<=qr) { lazy[id]+=val; sum[id]+=len[id]*val; return ; } pushdown(id); int mid=(l+r)>>1; if(ql<=mid) up(id<<1,l,mid,ql,qr,val); if(qr>mid) up(id<<1|1,mid+1,r,ql,qr,val); sum[id]=sum[id<<1]+sum[id<<1|1]; } int main() { while(~scanf("%d%d",&n,&m)) { build(1,1,n); while(m--) { char s[5]; scanf("%s",s); //printf("a[1].id:%d ",a[1].sum); if(s[0]=='Q') { int x,y; scanf("%d%d",&x,&y); printf("%lld ",qu(1,1,n,x,y)); } else { int x,y; ll z; scanf("%d%d%lld",&x,&y,&z); up(1,1,n,x,y,z); } } } }