您的位置:首页 > 其它

poj 1195

2015-08-10 11:30 302 查看
二维树状数组:http://www.java3z.com/cwbwebhome/article/article1/1369.html?id=4804

 

#include <stdio.h>
#include <string.h>
#define maxn 1035
int C[maxn][maxn];
int S;
int lowbit(int t){
return t&(-t);
}
int Sum(int i, int j){
int result = 0;
for(int x = i;x > 0;x -= lowbit(x)){
for(int y = j;y > 0;y -= lowbit(y)){
result += C[x][y];
}
}
return result;
}

void Modify(int i, int j, int delta){
for(int x = i;x <= S;x += lowbit(x))
for(int y = j;y <= S;y += lowbit(y)){
C[x][y] += delta;
}
}

int main()
{
int ins, x, y, a, l, b, r, t;
while(scanf("%d %d", &ins, &S) != EOF)
{
memset(C, 0, sizeof(C));
while(scanf("%d", &ins)&&ins != 3)
{
if(ins == 1){
scanf("%d %d %d", &x, &y, &a);
Modify(x + 1, y + 1, a);
}
if(ins == 2){
scanf("%d %d %d %d", &l, &b, &r, &t);
l++, b++, r++, t++;
printf("%d\n", Sum(r, t) - Sum(l - 1, t) - Sum(r, b - 1) + Sum(l - 1, b - 1));
}
}
}
}


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: