二维区间最值差

一 问题描述

约翰正在寻找最平坦的土地种植玉米,他花了很大的代价调查它的 N*N 公顷方形农场。每公顷都有一个整数高度,有 K 组查询。整数 B 是方形田地的一个边长。查询 B*B 子矩阵中最大高度和最小高度的差值。

二 输入和输出

1 输入

第 1 行包含 3 个整数,N、B 和 K。第 2 到 N+1 行,每行都包含 N 个整数,代表 N*N 公顷每公顷的高度,每行的第 1 个整数都表示第 1 列,第 2 个整数都表示第 2 列。接下来的 K 行,每行都包含两个整数,分别表示查询子矩阵左上角和的行和列。

2 输出

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

三 输入和输出样例

1 输入样例

5 3 1

5 1 2 6 3

1 3 5 2 7

7 2 4 6 1

9 9 8 6 5

0 6 9 3 9

1 2

2 输出样例

5

四 问题分析

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

五 算法设计

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

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

3 创建二维 ST。

4 从当前位置(x,y)开始,向右 B 列,向下 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值