题目描述

有一个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 ;
}

[HNOI2007] 理想正方形 二维ST表的更多相关文章

  1. BZOJ1047[HAOI2007]理想的正方形——二维ST表

    题目描述 有一个a*b的整数组成的矩阵,现请你从中找出一个n*n的正方形区域,使得该区域所有数中的最大值和最小值的差最小. 输入 第一行为3个整数,分别表示a,b,n的值第二行至第a+1行每行为b个非 ...

  2. 【洛谷 P2216】 [HAOI2007]理想的正方形(二维ST表)

    题目链接 做出二维\(ST\)表,然后\(O(n^2)\)扫一遍就好了. #include <cstdio> #include <cstring> #include <a ...

  3. BZOJ3577:玩手机(最大流,二维ST表)

    Description 现在有一堆手机放在坐标网格里面(坐标从1开始),坐标(i,j)的格子有s_(i,j)个手机. 玩手机当然需要有信号,不过这里的手机与基站与我们不太一样.基站分为两种:发送站和接 ...

  4. 【CodeForces】713 D. Animals and Puzzle 动态规划+二维ST表

    [题目]D. Animals and Puzzle [题意]给定n*m的01矩阵,Q次询问某个子矩阵内的最大正方形全1子矩阵边长.n,m<=1000,Q<=10^6. [算法]动态规划DP ...

  5. Codeforces 713D Animals and Puzzle(二维ST表+二分答案)

    题目链接 Animals and Puzzle 题意  给出一个1e3 * 1e3的01矩阵,给出t个询问,每个询问形如x1,y1,x2,y2 你需要回答在以$(x1, y1)$为左上角,$(x1, ...

  6. [模板]二维ST表

    考试yy二维ST表失败导致爆零. 其实和一维的ST表很像... 也是设$f[i][j][p][q]$为以$(i, j)$为左上角,长为$2^p$,宽为$2^q$的矩形的最大值. 算法流程是先把每一行都 ...

  7. [总结] 二维ST表及其优化

    二维 \(\mathcal{ST}\) 表,可以解决二维 \(\mathcal{RMQ}\) 问题.这里不能带修改,如果要修改,就需要二维线段树解决了. 上一道例题吧 ZOJ2859 类比一维 \(\ ...

  8. 数据结构:二维ST表

    POJ2019 我们其实是很有必要把ST算法拓展到二维的,因为二维的RMQ问题还是不少的 int N,B,K; ]; int val[maxn][maxn]; ][]; ][]; 这里的N是方阵的长宽 ...

  9. hdu2888 二维ST表(RMQ)

    二维RMQ其实和一维差不太多,但是dp时要用四维 /* 二维rmq */ #include<iostream> #include<cstring> #include<cs ...

随机推荐

  1. Python中使用python -m pip install --upgrade pip升级pip时老是不成功

    场景 在使用python -m pip install --upgrade pip进行pip升级时,每次到最后就是报一大堆红色,最终升级不成功. 实现 使用默认的镜像源时间过长就会没响应,使用豆瓣的镜 ...

  2. js 中 undefined、NaN、null

    undefined 即未定义 js 中 没有声明 或者 声明后未赋值的变量 用typeof判断后类型都是 undefined 但是直接console.log( ) 输出的话 没有声明的变量会报错:而声 ...

  3. Java 教程 (Java 对象和类)

    Java 对象和类 Java作为一种面向对象语言.支持以下基本概念: 多态 继承 封装 抽象 类 对象 实例 方法 重载 本节我们重点研究对象和类的概念. 对象:对象是类的一个实例(对象不是找个女朋友 ...

  4. response向客户端写入数据

    1.写入文字: protected void doGet(HttpServletRequest request, HttpServletResponse response) throws Servle ...

  5. MySQL索引&&开发规范

    规范总结 索引规范 默认添加的索引都是BTree索引.Innodb只支持BTree索引. 设计索引原则 - 最适合索引的列是WHERE子句中的列,而不是SELECT中的列. - 如果索引的字段很长,使 ...

  6. ASP.NET Core 2.2 : 二十三. 深入聊一聊配置的内部处理机制

    上一章介绍了配置的多种数据源被注册.加载和获取的过程,本节看一下这个过程系统是如何实现的.(ASP.NET Core 系列目录) 一.数据源的注册 在上一节介绍的数据源设置中,appsettings. ...

  7. Linux初识之Centos7中terminal光标位置偏移问题的解决

    新安装的centos7打开terminal发现光标位置向右偏移,使用起来影响感官,经查询后找到类似情况并顺利解决问题,特记录解决过程以作参考. 1.未解决时光标向右偏移显示: 2.打开设置(Setti ...

  8. 理解JavaScript中的this关键字

    JavaScript中this关键字理解 在爬虫的过程中遇到了前端的js代码,对于this关键字理解的不是很清楚,所以写下这篇笔记,不足之处,希望得以改之. this的指向在函数定义的时候无法确定,只 ...

  9. Ubuntu+docker+gitlab安装和使用

    以前自己写的代码都是在本地,因为都是自己一个人维护,现在交给团队维护了,所以想着搭建一个gitlab 1,拉镜像 安装非常简单 docker search gitlab  搜索镜像 docker pu ...

  10. jenkins自动化部署项目1--下载安装启动(linux)

    前面是在windows上搭建jenkins环境,最近有同事要我帮忙在linux上搭建一套,因此在此记录下过程. 因为jenkins.msi只能在windows上运行安装,因此在linux上安装jenk ...