标签:poj 1195 mobile phon 二维树状数组
| Time Limit: 5000MS | Memory Limit: 65536K | |
| Total Submissions: 16320 | Accepted: 7502 |
Description
Input

Output
Sample Input
0 4 1 1 2 3 2 0 0 2 2 1 1 1 2 1 1 2 -1 2 1 1 2 3 3
Sample Output
3 4
Source
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cstdlib>
#include<cmath>
#define N 1040
#define ll long long
using namespace std;
int n;
int bit[N][N];
int a[N][N];
ll sum(int i,int j) {
ll s=0;
while(i>0) {
int jj=j;
while(jj>0) {
s+=bit[i][jj];
jj-=jj&-jj;
}
i-=i&-i;
}
return s;
}
void add(int i,int j,int x) {
while(i<=n) {
int jj=j;
while(jj<=n) {
bit[i][jj]+=x;
jj+=jj&-jj;
}
i+=i&-i;
}
}
int main() {
//freopen("test.in","r",stdin);
int op;
while(scanf("%d",&op)) {
if(op==3)break;
if(op==0) {
scanf("%d",&n);
memset(bit,0,sizeof bit);
memset(a,0,sizeof a);
continue;
}
if(op==1) {
int x,y,v;
scanf("%d%d%d",&x,&y,&v);
x++,y++;
if(v<0) {
if(a[x][y]+v<0) {
//a[x][y]=0;
v=-1*a[x][y];
}
}
a[x][y]+=v;
add(x,y,v);
continue;
}
ll ans=0;
int lx,ly,rx,ry;
scanf("%d%d%d%d",&lx,&ly,&rx,&ry);
lx++,ly++,rx++,ry++;
ans=sum(rx,ry)-sum(lx-1,ry)-sum(rx,ly-1)+sum(lx-1,ly-1);
printf("%lld\n",ans);
}
return 0;
}版权声明:本文为博主原创文章,未经博主允许不得转载。
POJ 1195 Mobile phones(二维树状数组)
标签:poj 1195 mobile phon 二维树状数组
原文地址:http://blog.csdn.net/acm_baihuzi/article/details/46810827