题目链接:http://poj.org/problem?id=1195

题目意思:有一部 mobie phone 基站,它的面积被分成一个个小正方形(1 * 1 的大小),所有的小正方形的面积构成了一个 S * S 大小的矩阵(下标都是从 0 ~ S-1 变化的)。

  有四种指令:

  第 一 行的指令默认输入是 0, 空格之后是矩阵的大小: S

最后一行的指令是 3, 代表 整个输入结束

注意:这两行的指令只会出现一次!

夹在它们中间的指令有可能是指令1,假设为X Y A,代表向第 X 行 第 Y 列的那个小正方形加上A (可正可负),不需要输出结果。 又或者是指令2,假设为 L B R T,代表要计算出 行 L ~ R,列 B ~ T 所围住的矩形的和,这个指令要求输出这个和。

看了很久,终于看明白题目了,表示英文太差,经常看不懂POJ 的英文题 = =。

二维树状数组,有了前一天二维树状数组探索版的积累,套了下模板。不过询问那里,也就是指令 2 的输出有点问题,今天终于改好了,happy ^_^ ....

首先要知道二维树状数组这个模板的 Sum 究竟算出来的是什么:假如调用的是Sum(i, j)啦,那么它求出的是从最左上角的坐标到坐标 (i, j) 所围的面积的和!!! 那么如果要求特定的某个子矩阵的面积(例如 (2, 3) ~ (3,4)),就需要减去相应不需要的部分啦。

数字4 是我们要求的部分,如果单纯调用Sum(3, 4) 的话,得出的是编号 1 的和,那么我们需要减去2和3的和,才能得出4的和,而要得出2的和,也需要减去[A11 + A12]这个矩阵的和啦,也就是Sum(3, 2) - Sum(1, 2),对应代码中的 Sum(R+1, B)-Sum(L, B)。而编号 3 的和对应代码: Sum(L, T+1)。

(之前错误地写成Sum(3, 4)- Sum(2, 3) 了, = =,粗心呀~~~,读者请忽略)

还有一个值得注意的地方是,树状数组下标是从1开始的,而题目坐标是从0开始的,所以不妨相应地向右下角移动一位,就是说,假设输入的是0 0,那么就看成是1 1 (这个是受hdu 1541 的 Stars 启发啦)

 #include <iostream>
#include <cstdio>
#include <cstring>
using namespace std; const int maxn = + ;
int A[maxn][maxn];
int C[maxn][maxn];
int size; int lowbit(int x)
{
return x & (-x);
} int Sum(int i, int j)
{
int result = ;
for (int x = i; x > ; x -= lowbit(x))
{
for (int y = j; y > ; y -= lowbit(y))
result += C[x][y];
}
return result;
} void Modify(int i, int j, int delta)
{
A[i][j] += delta; for (int x = i; x < size+; x += lowbit(x))
{
for (int y = j; y < size+; y += lowbit(y))
C[x][y] += delta;
}
} int main()
{
int x, y, ask, num, L, B, R, T;
memset(A, , sizeof(A));
memset(C, , sizeof(C));
while (scanf("%d", &ask) != EOF && ask != )
{
if (ask == )
scanf("%d", &size);
else if (ask == )
{
scanf("%d%d%d", &x, &y, &num);
Modify(x+, y+, num);
}
else if (ask == )
{
scanf("%d%d%d%d", &L, &B, &R, &T);
printf("%d\n", Sum(R+, T+)-(Sum(R+, B)-Sum(L, B))- Sum(L, T+)); // 对应图中的1-2-3
}
}
return ;
}

poj 1195 Mobile phones 解题报告的更多相关文章

  1. poj 1195:Mobile phones(二维树状数组,矩阵求和)

    Mobile phones Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 14489   Accepted: 6735 De ...

  2. poj 1195:Mobile phones(二维线段树,矩阵求和)

    Mobile phones Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 14391   Accepted: 6685 De ...

  3. 题解报告:poj 1195 Mobile phones(二维BIT裸题)

    Description Suppose that the fourth generation mobile phone base stations in the Tampere area operat ...

  4. (简单) POJ 1195 Mobile phones,二维树状数组。

    Description Suppose that the fourth generation mobile phone base stations in the Tampere area operat ...

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

                                                                  Mobile phones Time Limit: 5000MS   Mem ...

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

    Description Suppose that the fourth generation mobile phone base stations in the Tampere area operat ...

  7. poj 1195 Mobile phones(二维树状数组)

    树状数组支持两种操作: Add(x, d)操作:   让a[x]增加d. Query(L,R): 计算 a[L]+a[L+1]……a[R]. 当要频繁的对数组元素进行修改,同时又要频繁的查询数组内任一 ...

  8. ●POJ 1195 Mobile phones

    题链: http://poj.org/problem?id=1195 题解: 二维树状数组 #include<cstdio> #include<cstring> #includ ...

  9. POJ 1195 Mobile phones【二维树状数组】

    <题目链接> 题目大意: 一个由数字构成的大矩阵,开始是全0,能进行两种操作1) 对矩阵里的某个数加上一个整数(可正可负)2) 查询某个子矩阵里所有数字的和要求对每次查询,输出结果 解题分 ...

随机推荐

  1. DP的序--Codeforces956E. Wardrobe

    $n \leq 10000$个盒子,有高度,高度总和$\leq 10000$,盒子有重要的和不重要的,问最多有多少重要盒子的底端在区间$[L,R]$. 这是个入门级的DP,但需要一点胆量MD这题能放D ...

  2. Paul Graham:梦寐以求的编程语言

    我的朋友曾对一位著名的操作系统专家说他想要设计一种真正优秀的编程语言.那位专家回答,这是浪费时间,优秀的语言不一定会被市场接受,很可能无人使用,因为语言的流行不取决于它本身.至少,那位专家设计的语言就 ...

  3. 某考试 T2 sum

    为什么其他人都是插值套插值啊,,,,就我是XJB做的吗2333 k次多项式的前缀和可以表示成k+1次多项式,用两次这个玩意就可以发现g可以表示成一个k+2次多项式. 然后我的做法是把g用拉格朗日插值+ ...

  4. JavaScript 函数作用域的“提升”现象

    在JavaScript当中,定义变量通过var操作符+变量名.但是不加 var 操作符,直接赋值也是可以的.例如 : message = "hello JavaScript ! " ...

  5. How to fill the background with image in landscape in IOS? 如何使image水平铺满屏幕

    UIImageView *backgroundImage = [[UIImageView alloc] initWithFrame:self.view.frame];    [backgroundIm ...

  6. 【gradle】mac上安装gradle

    根据gradle官网指导,一步一步安装即可 https://gradle.org/install/ 或者,如果你没有办法墙出去,或者本地使用命令下载gradle比较慢的话,可以采用下面的方式 ==== ...

  7. 【Android小项目】找不同,改编自&quot;寻找房祖名&quot;的一款开源小应用。

    近期在微信朋友圈"寻找房祖名"和"万里寻刀"这类小游戏比較火.我试着写了一个android版本号的,里面全是一系列的形近字,实现原理非常easy:用一个Grid ...

  8. Dynamics CRM 2015/2016 Web API:新的数据查询方式

    今天我们来看看Web API的数据查询功能,尽管之前介绍CRUD的文章里面提到过怎么去Read数据,可是并没有详细的去深究那些细节,今天我们就来详细看看吧.事实上呢,Web API的数据查询接口也是基 ...

  9. 关于 redux-saga 中 take 使用方法详解

    本文介绍了关于redux-saga中take使用方法详解,分享给大家,具体如下: 带来一个自己研究好久的API使用方法. redux-saga中effect中take这个API使用方式,用的多的是ca ...

  10. mui + vue 模板

    示例代码: (function(mui, doc) { // 定义全局变量(计时器) var timer; // mui初始化 mui.init(); // 创建vue的实例 var app = ne ...