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

训练4
二维区间最值差

题目描述(POJ2019): 约翰正在寻找最平坦的土地种植玉米。他花了很大的代价调查他的 N × N 公顷的方形农场(1≤ N ≤250)。每公顷都有一个整数高度(0≤高度≤250)。有 K (1≤ K ≤100,000)组查询,整数 B (1≤ B N )是方形田地的一个边长,查询 B × B 子矩阵中最大高度和最小高度的差值。

输入: 第1行包含3个整数 N B K 。第2.. N +1行,每行都包含 N 个整数,代表 N × N 公顷每公顷的高度,每行的第1个整数都表示第1列,第2个整数都表示第2列。接下来K行,每行都包含两个整数(在1.. N - B +1范围内),分别表示查询子矩阵左上角的行和列。

输出: 对每个查询,都单行输出子矩阵中最大高度和最小高度的差值。

题解: 本题属于二维区间最值查询问题,可以使用ST解决,只不过增加了一维,且查询时需要注意区间问题。Fmax[ k ][ i ][ j ]表示第 k 行[ i , i +2 j -1]区间的最大值,区间长度为2 j

1. 算法设计

(1)求出数据范围内所有数的log值,将其存储在数组lb[]中。

(2)将每个元素 a [ k ][ i ]都存入F[ k ][ i ][0]中。

(3)创建二维ST。

(4)从当前位置( x , y )开始,向右B列,向下B行,查询每一行的最大值和最小值,再求区间最大值和最小值。输出二维区间的最大值和最小值之差。 Sb5WXK91s+OHOwYf/zYbUr4VwNJXenJ++tx6y5H8xHRTwKFMM0nRkpwYscUl9Zbv

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