首页 > 代码库 > POJ_1195 Mobile phones 【二维树状数组】
POJ_1195 Mobile phones 【二维树状数组】
题目链接:http://poj.org/problem?id=1195
纯纯的二维树状数组,不解释,只需要注意一点,由于题目中的数组从0开始计算,所以维护的时候需要加1。因为树状数组的下标是不能为1的
代码:
#include <iostream> #include <cstdio> #define N 1030 using namespace std; int c[N][N]; int cas,n,x,y,a,l,b,r,t; int Lowbit(int x) { return x & (-x); } void Updata(int x,int y,int a) { int i,k; for(i=x; i<=n; i+=Lowbit(i)) for(k=y; k<=n; k+=Lowbit(k)) c[i][k]+=a; } int Getsum(int x,int y) { int i,k,sum = 0; for(i=x; i>0; i-=Lowbit(i)) for(k=y; k>0; k-=Lowbit(k)) sum += c[i][k]; return sum; } int main() { scanf("%d%d",&cas,&n); while(~scanf("%d",&cas)) { if(cas==1) { scanf("%d%d%d",&x,&y,&a); Updata(x+1,y+1,a); } if(cas==2) { scanf("%d%d%d%d",&l,&b,&r,&t); int a=Getsum(r+1,t+1)-Getsum(l,t+1)-Getsum(r+1,b)+Getsum(l,b); printf("%d\n",a); } if(cas==3) return 0; } return 0; }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。