您的位置:首页 > 其它

POJ-1195 Mobile phones(二维树状数组裸题)

2014-08-13 22:52 495 查看
单纯的二维树状数组与一维很相似,不多解释了,看下代码就懂了。

注意下二维和一维求和有些不同。

我的代码:

#include <cstdio>
#include <algorithm>
#include <iostream>
#include <cstring>
#define maxn 1200
using namespace std;
int tree[maxn][maxn];
int op,n;
int add(int x,int y,int v){
for (int i=x;i<=n;i+=i&(-i))
for (int j=y;j<=n;j+=j&(-j))
tree[i][j]+=v;
return 0;
}
int sum(int x,int y){
int ans=0;
for (int i=x;i>0;i-=i&(-i))
for (int j=y;j>0;j-=j&(-j))
ans+=tree[i][j];
return ans;
}
int main (){
//freopen("test.in","r",stdin);
scanf("%d%d",&op,&n);
while (~scanf("%d",&op)&&op!=3){
if (op==1){
int x,y,v;
scanf("%d%d%d",&x,&y,&v);
add(x+1,y+1,v);
}
if (op==2){
int L,R,B,T;scanf("%d%d%d%d",&L,&B,&R,&T);
int ans1,ans2,ans3,ans4;
ans1=sum(R+1,T+1);
ans2=sum(R+1,B);
ans3=sum(L,T+1);
ans4=sum(L,B);
//cout <<ans1<<" "<<ans2<<" "<<ans3<<" "<<ans4<<endl;
printf("%d\n",ans1-ans2-ans3+ans4);
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: