实在太暴力了!(过于暴力,不想讲)

#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<algorithm>
#define ll long long
#define gc getchar()
using namespace std;
const int N=1e5+5;
const int B=1e3+5;
template<class lb>
inline void qr(lb &x)
{
    x=0;char c=gc;int f=1;
    while(c<'0'||c>'9'){if(c=='-')f=-1;c=gc;}
    while(c>='0'&&c<='9'){x=x*10+(c^48);c=gc;}
    x*=f;
}
void qw(ll x)
{
    if(x<0)x=-x,putchar('-');
    if(x/10)qw(x/10);
    putchar(x%10+48);
}
ll add[B],sum[B],a[N];
int l[B],r[B],pos[N];
int main()
{
    int n,m;qr(n),qr(m);
    for(int i=1;i<=n;i++)qr(a[i]);
    int bl=sqrt(n),sz=bl;
    for(int i=1;i<=sz;i++)
    {
        l[i]=r[i-1]+1;r[i]=i*bl;
    }
    if(r[sz]<n)l[sz+1]=r[sz]+1,r[++sz]=n;
    for(int i=1;i<=sz;i++)
        for(int j=l[i];j<=r[i];j++)
        {
            pos[j]=i;sum[i]+=a[j];
        }
    for(int i=1;i<=m;i++)
    {
        char op[3];int L,R;ll d;scanf("%s",op);qr(L),qr(R);
        if(op[0]=='C')
        {
            qr(d);
            int p=pos[L],q=pos[R];
            if(p==q){for(int i=L;i<=R;i++)a[i]+=d;sum[p]+=(R-L+1)*d;}
            else
            {
                for(int i=p+1;i<q;i++)add[i]+=d;
                for(int i=L;i<=r[p];i++)a[i]+=d;
                for(int i=l[q];i<=R;i++)a[i]+=d;
                sum[p]+=(r[p]-L+1)*d;sum[q]+=(R-l[q]+1)*d;
            }
        }
        else
        {
            int p=pos[L],q=pos[R];ll ans=0;
            if(p==q){for(int i=L;i<=R;i++)ans+=a[i];ans+=(R-L+1)*add[p];}
            else
            {
                for(int i=p+1;i<q;i++)ans+=sum[i]+add[i]*(r[i]-l[i]+1);
                for(int i=L;i<=r[p];i++)ans+=a[i];ans+=add[p]*(r[p]-L+1);
                for(int i=l[q];i<=R;i++)ans+=a[i];ans+=add[q]*(R-l[q]+1);
            }
            qw(ans);puts("");
        }
    }
    return 0;
}