RT。和题解都对了30min了。。。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define _for(i,a,b) for(register int (i)=(a);(i)<=(b);(i)++)
#define For(i,a,b) for(register int (i)=(a);(i)>=(b);(i)--)
#define INF 0x7fffffff
#define il inline
#define rg register
inline long long read(){
long long num=0;int z=1;char c=getchar();
if(c=='-') z=-1;
while((c<'0'||c>'9')&&c!='-') c=getchar();
if(c=='-') z=-1,c=getchar();
while(c>='0'&&c<='9') num=(num<<1)+(num<<3)+(c^48),c=getchar();
return z*num;
}
const int maxn=2e3+5;
int n,m;
class Tree{
public:
int c[maxn][maxn];
il void change(int x,int y,int k);
il int ask(int x,int y);
}T,Ti,Tj,Tij;
il void Tree::change(int x,int y,int k){
for(;x<=n;x+=x&-x) for(;y<=m;y+=y&-y) c[x][y]+=k;
return ;
}
il int Tree::ask(int x,int y){
int ans=0;
for(;x;x-=x&-x) for(;y;y-=y&-y) ans+=c[x][y];
return ans;
}
il int sum(int x,int y){
return T.ask(x,y)*(x+1)*(y+1)-Ti.ask(x,y)*(y+1)-Tj.ask(x,y)*(x+1)+Tij.ask(x,y);
}
il void add(int x,int y,int d){
T.change(x,y,d),Ti.change(x,y,d*x),Tj.change(x,y,d*y),Tij.change(x,y,d*x*y);
return ;
}
char c[3];
int main(){
n=read(),m=read();
for(;~scanf("%s",&c);){
int l1=read(),r1=read(),l2=read(),r2=read();
// printf("%d %d %d %d\n",l1,r1,l2,r2);
if(c[0]=='L'){
int val=read();
add(l1,r1,val);
add(l1,r2+1,-val);
add(l2+1,r1,-val);
add(l2+1,r2+1,val);
}
else printf("%d\n",sum(l2,r2)-sum(l1-1,r2)-sum(l2,r1-1)+sum(l1-1,r1-1));
}
return 0;
}