///我只想存个代码,思路来源解法都是上面那个网站看的
#include <stdio.h> #include <string.h> using namespace std; const int N = 100000+10; long long det[N],num[N],sum[N]; long long c1[N],c2[N]; int l,r,m,n; char st[10]; int lowbit(int x) { return x&(-x); } void update(long long *array,int l,long long val) { while(l<=n) { array[l]+=val; l+=lowbit(l); } } long long getsum(long long *array,int l) { long long ans = 0; while(l>0) { ans+=array[l]; l-=lowbit(l); } return ans; } int main() { int t; scanf("%d %d",&n,&m); for(int i=1;i<=n;i++) { scanf("%lld",&num[i]); sum[i] = sum[i-1]+num[i]; } while(m--) { scanf("%s",st); if(st[0]=='C') { scanf("%d %d %d",&l,&r,&t); update(c1,l,t); update(c1,r+1,-t); update(c2,l,t*l); update(c2,r+1,-t*(r+1)); } else { scanf("%d %d",&l,&r); long long xx = 0; xx = sum[r] - sum[l-1]; xx+= (r+1)*getsum(c1, r) - getsum(c2, r); xx -= (l*getsum(c1, l-1) - getsum(c2, l-1)); printf("%lld\n",xx); } } return 0; }