// poj 1195 二维树状数组.cpp : 定义控制台应用程序的入口点。
//节点更新,区间求和。
#include "stdafx.h"
#include <iostream>
using namespace std;
const int MAXN = 1030;
__int64 sum[MAXN][MAXN];
int n;
int lowbit(int x)
{
return x&(-x);
}
void update(int x, int y, int val) //将 a[x][y] 的值增加val
{
for(int i=x; i<=n; i+=lowbit(i))
{
for(int j=y; j<=n; j+=lowbit(j))
{
sum[i][j] += val;
}
}
}
__int64 getSum(int x, int y) //求以1,1为左上角端点,学校,x,y为右下角端点的矩阵和.
{
__int64 s = 0;
for(int i=x; i>0; i-=lowbit(i))
{
for(int j=y; j>0; j-=lowbit(j))
{
s += sum[i][j];
}
}
return s;
}
int main()
{
int order;
int x,y,val;
int L,B,R,T;
while(cin>>order)
{
cin>>n;
memset(sum,0,sizeof(sum));
while(cin>>order)
{
if(order == 1)
{
cin>>x>>y>>val;
x++;
y++;
update(x,y,val);
}
else if(order == 2)
{
cin>>L>>B>>R>>T;
L++;
B++;
R++;
T++;
//求以(L,B)为左上角端点,(R,T)为右下角端点的矩阵和
cout<<getSum(R,T)-getSum(L-1,T)-getSum(R,B-1)+getSum(L-1,B-1)<<endl;
}
else if(order == 3)
{
break;
}
}
}
return 0;
}