#include<bits/stdc++.h>
#define il inline
#define re register
using namespace std;
il int read()
{
re int x=0,f=1;re char c=getchar();
while(c<'0'||c>'9') {if(c=='-') f=-1;c=getchar();}
while(c>='0'&&c<='9') x=x*10+c-48,c=getchar();
return x*f;
}
const int maxn=200099;
const int maxm=2000007;
struct node{
int tim,x,y,val,id;
}e[maxn];
int cnt,a[maxm],w;
void adds(int tim,int x,int y,int val,int id){
e[cnt].tim=tim;
e[cnt].x=x;
e[cnt].y=y;
e[cnt].val=val;
e[cnt].id=id;
}
int lowbit(int x){
return (x)&(-x);
}
il void add(int x,int v){
while(x<=w){
a[x]+=v;
x+=lowbit(x);
}
}
il int query(int x){
int ans=0;
while(x){
ans+=a[x];
x-=lowbit(x);
}
return ans;
}
bool cmp1(node a,node b){
if(a.x==b.x) return a.y<b.y;
else return a.x<b.y;
}
bool cmp(node a,node b){
return a.tim<b.tim;
}
il void CDQ(int l,int r){
if(l==r) return ;
int mid=(l+r)>>1;
CDQ(l,mid);
CDQ(mid+1,r);
sort(e+l,e+mid+1,cmp1);
sort(e+mid+1,e+r+1,cmp1);
int i=l,j=mid+1,k=l;
for(;j<=r;j++){
while(e[i].x<=e[j].x&&i<=mid){
if(e[i].id==0){
add(e[i].y,e[i].val);
}
++i;
}
if(e[j].id==1){
e[j].val+=query(e[j].y);
}
}
for(j=l;j<i;j++){
if(e[j].id==0) add(e[j].y,-e[j].val);
}
}
int main(){
read(),w=read()+1;
int opt=read();
while(opt!=3){
if(opt==1){
int x=read()+1,y=read()+1,val=read();
adds(++cnt,x,y,val,0);
}
else{
int x1=read(),y1=read(),x2=read()+1,y2=read()+1;
adds(++cnt,x1,y1,0,1);
adds(++cnt,x2,y2,0,1);
adds(++cnt,x2,y1,0,1);
adds(++cnt,x1,y2,0,1);
}
opt=read();
}
CDQ(1,cnt);
sort(e+1,e+cnt+1,cmp);
for(re int i=1;i<=cnt;i++){
if(e[i].id==1){
cout<<e[i].val+e[i+1].val-e[i+2].val-e[i+3].val<<endl;
i+=3;
}
}
return 0;
}
为什么会输出0啊,救命救命