给出一个 n×m的零矩阵 A ,你需要完成如下操作:
1 a b c d k:表示左上角为 (a,b) ,右下角为 (c,d) 的子矩阵内所有数都自增 k2 x y:表示询问元素Ax,y 的值样例输入:
2 2
1 1 1 2 2 5
1 1 2 2 2 -3
2 1 1
2 1 2
2 2 1
2 2 2
样例输出:
5
2
5
2
代码 (WA):
#include <cstdio>
#define eggy using
#define party namespace
#define lb(x) ((x)&(-x))
eggy party std;
int i,j,k;
long long n,m,t[100];
long long c[4100][4100];
void add(long long x, long long y, long long v);
long long sum(long long x, long long y);
int main()
{
/*return 0;*/
scanf("%lld %lld",&n,&m);
while(scanf("%d",&k) != EOF)
{
if (k == 1)
{
scanf("%lld %lld %lld %lld %lld",&t[2],&t[3],&t[4],&t[5],&t[6]); getchar();
t[4]++; t[5]++;
add(t[2],t[3],t[6]);
add(t[2],t[5],0-t[6]);
add(t[3],t[4],0-t[6]);
add(t[4],t[5],t[6]);
}
else
{
scanf("%lld %lld",&t[2],&t[3]); getchar();
printf("%lld\n",sum(t[2],t[3]) );
}
}
return 0;
}
void add(long long x, long long y, long long v)
{
for (i = x; i <= n; i += lb(i))
for (j = y; j <= m; j += lb(j))
c[i][j] += v;
}
long long sum(long long x, long long y)
{
long long num = 0ll;
for (i = x; i > 0; i -= lb(i))
for (j = y; j > 0; j -= lb(j))
num += c[i][j];
return num;
}