题目描述

有一个a*b的整数组成的矩阵,现请你从中找出一个n*n的正方形区域,使得该区域所有数中的最大值和最小值的差最小。

输入输出格式

输入格式:

第一行为3个整数,分别表示a,b,n的值

第二行至第a+1行每行为b个非负整数,表示矩阵中相应位置上的数。每行相邻两数之间用一空格分隔。

输出格式:

仅一个整数,为a*b矩阵中所有“n*n正方形区域中的最大整数和最小整数的差值”的最小值。

输入输出样例

输入样例#1:

5 4 2
1 2 5 6
0 17 16 0
16 17 2 1
2 10 2 1
1 2 2 2
输出样例#1:

1

说明

问题规模

(1)矩阵中的所有数都不超过1,000,000,000

(2)20%的数据2<=a,b<=100,n<=a,n<=b,n<=10

(3)100%的数据2<=a,b<=1000,n<=a,n<=b,n<=100


直接线段树搞貌似不太现实...

学了学二维ST表,没学会,先留着坑,以后学


#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
int a, b, n;
int tt;
int STn[][];
int STx[][];
int G[][];
int ans = 0x7f7f7f7f; inline int Query(int x, int y)
{
int maxx = , minn = ;
maxx = max(STx[x][y], max(STx[x - (<<tt) + n][y], max(STx[x][y - (<<tt) + n], STx[x - (<<tt) + n][y - (<<tt) + n]))) ;
minn = min(STn[x][y], min(STn[x - (<<tt) + n][y], min(STn[x][y - (<<tt) + n], STn[x - (<<tt) + n][y - (<<tt) + n]))) ;
return maxx - minn;
} int main()
{
scanf("%d%d%d", &a, &b, &n);
tt = log(n) / log();
for (register int i = ; i <= a ; i ++)
{
for (register int j = ; j <= b ; j ++)
{
int x;scanf("%d", &x);G[i][j] = x;
STn[i][j] = STx[i][j] = x;
}
}
for (register int k = ; k < tt ; k ++)
{
for (register int i = ; i <= a ; i ++)
{
if (i + (<<k) > a) continue;
for (register int j = ; j <= b ; j ++)
{
if (j + (<<k) > b) continue;
STn[i][j] = min(STn[i][j], min(STn[i + (<<k)][j + (<<k)], min(STn[i + (<<k)][j], STn[i][j + (<<k)])));
STx[i][j] = max(STx[i][j], max(STx[i + (<<k)][j + (<<k)], max(STx[i + (<<k)][j], STx[i][j + (<<k)])));
}
}
}
for (register int i = ; i <= a - n + ; i ++)
{
for (register int j = ; j <= b - n + ; j ++)
{
ans = min(ans, Query(i, j));
}
}
cout << ans;
return ;
}

最新文章

  1. Android Tint
  2. nodejs学习之events
  3. 一个哥们看到数据库日志不断增大 [log_reuse_wait_desc]为replication 之后的做法
  4. 【leetcode❤python】 155. Min Stack
  5. hdu5432 二分
  6. 那些在学习iOS开发前就应该知道的事(part 2)
  7. HDU 1708 简单dp问题 Fibonacci String
  8. 为apache与mysql创建快捷方式
  9. iframe 适用高度
  10. 基于EF+MVC+Bootstrap的通用后台管理系统及架构
  11. 仿javascript中confirm()方法的小插件
  12. Android消息推送之GCM方式(一)
  13. tomcat启动,但是访问不了可能的一种状况。
  14. Hadoop 系列文章(二) Hadoop配置部署启动HDFS及本地模式运行MapReduce
  15. Vue中常用的三种传值方式
  16. Paper Read: Robust Deep Multi-modal Learning Based on Gated Information Fusion Network
  17. 在Linux服务器上运行Jupyter notebook server教程
  18. mysql学习(2)-Navicat Premium 12 链接MySQL8.0.11数据库报2059错误
  19. 使用jquery将表单元素转json提交后台
  20. ES6学习--Array.from()方法

热门文章

  1. 无法安装64位office,因为您的PC上有32位
  2. WInform中实现设置ZedGraph中曲线的X轴与Y轴的上限与下限
  3. Charles 下载
  4. 增删改查——DBUtils
  5. validator 自动化校验
  6. 可能是 Python 中最火的第三方开源测试框架 pytest
  7. 利用kubeadm快速部署 kubernetes 集群
  8. Linux 修改 ls 时间显示格式
  9. [python]汉诺塔问题
  10. asp.net core IdentityServer4 实现 implicit(隐式许可)实现第三方登录