#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
struct node{
int x,y,z,b,p,t;
}q[200010*4],tmp[200010*4];
int n,tot,t,sum[200010*4],ans[200010*4];
int cmp(node i,node j){
if(i.x==j.x&&i.y==j.y)return i.p<j.p;
if(i.x==j.x)return i.y<j.y;
return i.x<j.x;
}
void add(int x,int y){
while(x<=n)sum[x]+=y,x+=x&-x;
}
int getsum(int x){
int result=0;
while(x>0)result+=sum[x],x-=x&-x;
return result;
}
void work(int l,int r){
if(l==r)return;
int mid=(l+r)>>1;
int ll=l,rr=mid+1;
for(int i=l;i<=r;i++){
if(q[i].t<=mid&&q[i].p==1)add(q[i].y,q[i].z);
if(q[i].t>mid&&q[i].p==2)ans[q[i].b]+=getsum(q[i].y)*q[i].z;
}
for(int i=l;i<=r;i++)
if(q[i].t<=mid&&q[i].p==1)add(q[i].y,-q[i].z);
for(int i=l;i<=r;i++){
if(q[i].t<=mid)tmp[ll++]=q[i];
else tmp[rr++]=q[i];
}
for(int i=l;i<=r;i++)q[i]=tmp[i];
work(l,mid);work(mid+1,r);
}
int main(){
scanf("%d",&n);
int f,x1,x2,y1,y2,z;
while(1){
scanf("%d",&f);
if(f==1){
scanf("%d%d%d",&x1,&y1,&z);
q[++tot].x=x1,q[tot].y=y1,q[tot].p=1,q[tot].z=z,q[tot].t=tot;
}
if(f==2){
scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
q[++tot].x=x2,q[tot].y=y2,q[tot].p=2,q[tot].z=1,q[tot].t=tot,q[tot].b=++t;
q[++tot].x=x2,q[tot].y=y1-1,q[tot].p=2,q[tot].z=-1,q[tot].t=tot,q[tot].b=t;
q[++tot].x=x1-1,q[tot].y=y2,q[tot].p=2,q[tot].z=-1,q[tot].t=tot,q[tot].b=t;
q[++tot].x=x1-1,q[tot].y=y1-1,q[tot].p=2,q[tot].z=1,q[tot].t=tot,q[tot].b=t;
}
if(f==3)break;
}
sort(q+1,q+tot+1,cmp);
work(1,tot);
for(int i=1;i<=t;i++){
//cout<<ans[i]<<endl;
printf("%d\n",ans[i]);//不要用cout,蜜汁RE
}
}