比赛 |
20110728 |
评测结果 |
AAAEEEEEEE |
题目名称 |
蝗灾 |
最终得分 |
30 |
用户昵称 |
.Xmz |
运行时间 |
0.000 s |
代码语言 |
C++ |
内存使用 |
0.00 MiB |
提交时间 |
2011-07-28 10:17:14 |
显示代码纯文本
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <cstdio>
#define low(x) ( x & (-x) )
using namespace std;
int x[2049][2049],n,m;
void add(int a,int b,int c)
{
for (int i=a;i<=n;i+=low(i))
for (int j=b;j<=n;j+=low(j))
x[i][j]+=c;
}
int sum(int a,int b)
{
int re=0;
for (int i=a;i>0;i-=low(i))
for (int j=b;j>0;j-=low(j))
re+=x[i][j];
return re;
}
int check(int a1,int b1,int a2,int b2)
{
int t;
t=max(a1,a2);a1=min(a1,a2);a2=t;
t=max(b1,b2);b1=min(b1,b2);b2=t;
return sum(a2,b2)-sum(a1-1,b2)-sum(a2,b1-1)+sum(a1-1,b1-1);
}
int main()
{
freopen("locust.in","r",stdin);
freopen("locust.out","w",stdout);
scanf("%d%d",&n,&m);
int a,b,c,d;
for (;m;--m)
{
scanf("%d",&d);
if (d==1)
{
scanf("%d%d%d",&a,&b,&c);
add(a,b,c);
}
else
{
scanf("%d%d%d%d",&a,&b,&c,&d);
printf("%d\n",check(a,b,c,d));
}
}
return 0;
}