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

题意:在一个S*S的正方形内,有两种操作 1 X Y A 是在(X,Y)这个点加A

2 X1 Y1 X2 Y2查询(X1,X2) 到 (Y1,Y2) 这个矩形范围内手机的数量

而且数据的边界也是从0开始用树状数组的时候要加一处理

对于求矩形面积用一个大的矩形剪去三个边界的小矩形即可

ans=query(x2,y2)-query(x2,y1-1)-query(x1-1,y2)+query(x1-1,y1-1);

//4352K547MS#include<cstdio>#include<iostream>#include<cstring>#include<algorithm>using namespace std;#define M 1050int tree[M][M],lim;int lowbit(int x){return x&-x;}void add(int x,int y,int val){int tmp;while(x<=lim){tmp=y;while(tmp<=lim){tree[x][tmp]+=val;tmp+=lowbit(tmp);}x+=lowbit(x);}}int query(int x,int y){int s=0;while(x>0){int tmp=y;while(tmp>0){s+=tree[x][tmp];tmp-=lowbit(tmp);}x-=lowbit(x);}return s;}int main(){int op;while(scanf("%d",&op)&&op!=3){if(op==0){scanf("%d",&lim);lim++;}if(op==1){int a,b,val;scanf("%d%d%d",&a,&b,&val);add(a+1,b+1,val);}if(op==2){int x1,y1,x2,y2;scanf("%d%d%d%d",&x1,&y1,&x2,&y2);x1++;y1++;x2++;y2++;int ans=query(x2,y2)-query(x2,y1-1)-query(x1-1,y2)+query(x1-1,y1-1);printf("%d\n",ans);}}return 0;}

,都可以…孔子的,老子的. 孙子的…都可以

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

相关文章:

你感兴趣的文章:

标签云: