购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

训练4
矩形区域查询

题目描述(POJ1195): 移动电话的基站区域分为多个正方形单元,形成 S × S 矩阵,行和列的编号为0~ S -1,每个单元都包含一个基站。一个单元内活动手机的数量可能发生变化,因为手机从一个单元移动到另一个单元,或手机开机、关机。编写程序,改变某个单元的活动手机数量,并查询给定矩形区域中当前活动手机的总数量。

输入: 输入和输出均为整数。每个输入都占一行,包含一个指令和多个参数。所有值始终在以下数据范围内。若 A 为负,则可以假设它不会将值减小到零以下。

· 表大小:1×1≤ S × S ≤1024×1024。

· 单元值:0≤ V ≤32767。

· 更新量:-32768≤ A ≤32767。

· 输入中的指令数:3≤ U ≤60002。

· 整个表中的最大电话数: M =2 30

输出: 对指令2,单行输出矩形区域中当前活动手机的总数量。

题解: 本题包括单点更新与矩形区间和查询,是非常简单的二维树状数组问题。

1. 算法设计

直接采用二维树状数组进行点更新和矩阵区间和查询即可。注意:本题坐标从0开始,树状数组下标必须从1开始,所以对输入下标做加1处理。 1dgRWe2tK3FNUEiOogDzN2kn1sBUecMDXEjK5WXdj2cwVFVqkm/hjxlDcdvA6N3h

2. 算法实现
点击中间区域
呼出菜单
上一章
目录
下一章
×

打开