// 题意: n*n的矩阵 ,定义两种操作:
// (1) x y a : [x,y]的值加上a (2) x1 y1 x2 y2 : 查询子矩阵[x1,y1] -[x2,y2]的和
#include <iostream> //简单二维树状数组
using namespace std;
int C[1025][1025]; //树状数组初始化为0
int side;
int lowbit(int x)
{
return x&(-x);
}
void modify(int x,int y,int a)
{
x++;y++; //让数组下标从 1 开始
while(x<=side)
{
int j=y;
while(j<=side)
{
C[x][j]+=a;
j+=lowbit(j);
}
x+=lowbit(x);
}
}
int sum(int x,int y)
{
x++;y++;
int s=0;
while(x>0)
{
int j=y;
while(j>0)
{
s+=C[x][j];
j-=lowbit(j);
}
x-=lowbit(x);
}
return s;
}
int main()
{
int op,ans;
while(scanf("%d",&op)&&op!=3)
{
switch (op)
{
case 0:
scanf("%d",&side);
break;
case 1:
int x,y,a;
scanf("%d%d%d",&x,&y,&a);
modify(x,y,a);
break;
case 2:
int x1,y1,x2,y2;
scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
ans=sum(x2,y2)-sum(x1-1,y2)-sum(x2,y1-1)+sum(x1-1,y1-1);
printf("%d\n",ans);
break;
default:
break;
}
}
return 0;
}
poj 1195 Mobile phones
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
Mobile phones POJ - 1195
点击打开链接模板题 区间更新点
二维线段树 POJ #include 模板题 区间更新 -
POJ 1195 Mobile phones 二维线段树
来很麻烦,而且空
#include 二维线段树 ios -
POJ 1195 Mobile phones【树状数组二维】
题目大意更新:一个矩阵的一个元素求和:求一个子矩阵元素和学习了二维的树状数组和一维一样
ci #define #include -
POJ 1195 Mobile phones (二维树状树组)
由于英语极差,看了半天也没看懂题目,最后参考了其他人的题解才搞懂题目,我就直接把题意贴过来了 题意:这道题目只是题意自己就去理解了半
ACM 数据结构 树状数组 二维树状数组 poj -
(单纯二维) Mobile phones (1195)
注意更新的意义。,只须更新一次就行。他往上更新不是更新所有。#include#include#include#include#include#include#includ
mobile input integer generation go -
POJ1195 Mobile phones 【二维树状数组】
Mobile phones Time Limit: 5000MS Memory Limit: 65536K
数据 标准输出 函数指针数组 ide 输入输出 -
POJ 1195 Mobile phones (二维树状数组或线段树)
偶然发现这题还没A掉............速速解决了.............树状数组和线段树比较下,线段树是在是太冗余了,以后能用树状
#include #define 树状数组 线段树 ios