#include<stdio.h>
#include<iostream>
#include<queue>
using namespace std;
long long int ad[1005],adc[105][105];
long long int ap[105][105],gank[100];
struct shu
{
long long int a,b;//a shi b xu
long long int zuo,you;
}la[400050];
long long int chuci(long long int a,long long int b,long long int c)
{
la[c].zuo=a;la[c].you=b;la[c].a=la[c].b=0;
if(a==b)
{
scanf("%lld",&la[c].a);
return la[c].a;
}
long long int d=(a+b)/2;
la[c].a+=chuci(a,d,c*2);
la[c].a+=chuci(d+1,b,c*2+1);
return la[c].a;
}
void fafa(long long int c)
{
if(la[c].you==la[c].zuo)
{
la[c].a+=la[c].b;
la[c].b=0;
return;
}
la[c*2].b+=la[c].b;
la[c*2+1].b+=la[c].b;
la[c].a+=la[c].b*(la[c].you-la[c].zuo+1);
la[c].b=0;
return;
}
void add(long long int a,long long int b,long long int c,long long int d)//a biao b zuo c you d nuber
{
if(la[a].zuo==b && la[a].you==c)
{
la[a].b+=d;
return ;
}
la[a].a+=(c-b+1)*d;
long long int e=la[a].you+la[a].zuo;
e/=2;
if(la[a].b!=0)fafa(a);
if(c<=e)
{
add(a*2,b,c,d);
}
if(b>e)
{
add(a*2+1,b,c,d);
}
if(b<=e && c>e)
{
add(a*2,b,e,d);
//prlong long intf("%d %d %d\n",b,e,d);
add(a*2+1,e+1,c,d);
//prlong long intf("%d %d %d\n",e+1,c,d);
}
return;
}
long long int quu(long long int a,long long int b,long long int c)//b zuo c you
{
//cout<<b<<" "<<c<<endl;
if(la[a].b!=0)fafa(a);
if(la[a].zuo==b && la[a].you==c)
{
return la[a].a;
}
long long int d=(la[a].zuo+la[a].you)/2;
if(b>d)return quu(a*2+1,b,c);
else if(c<=d) return quu(a*2,b,c);
else return quu(a*2,b,d)+quu(a*2+1,d+1,c);
}
int main()
{
long long int a,b,c,e,f,i,j,k;
long long int d;
char name[30];
scanf("%lld %lld",&a,&b);
chuci(1,a,1);
//scanf("%d",&b);
for(k=1;k<=b;k++)
{
scanf("%s",name);
//if(name[0]=='E')break;
if(name[0]=='Q')
{
scanf("%lld %lld",&d,&e);
if(d>e)
{
f=d;d=e;e=f;
}
printf("%lld\n",quu(1,d,e));
}
if(name[0]=='C')
{
scanf("%lld %lld %lld",&d,&e,&f);
if(d>e)
{
i=d;d=e;e=i;
}
add(1,d,e,f);
}
}
//for(i=1;i<=40;i++)
{
//printf("%d %d %d %d\n",i,la[i].zuo,la[i].you,la[i].a);
}
return 0;
}
评论0