题目描述

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

输入

  第一行为3个整数,分别表示a,b,n的值第二行至第a+1行每行为b个非负整数,表示矩阵中相应位置上的数。每
行相邻两数之间用一空格分隔。
100%的数据2<=a,b<=1000,n<=a,n<=b,n<=1000

输出

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

样例输入

5 4 2
1 2 5 6
0 17 16 0
16 17 2 1
2 10 2 1
1 2 2 2

样例输出

1
 
 
二维ST表,f[i][j][k]表示以i,j为右下端点边长为2k的正方形内的最大值,最小值同理,枚举每个点作为右下端点求一下最大值和最小值的差来更新答案即可。

#include<set>
#include<map>
#include<queue>
#include<stack>
#include<cmath>
#include<cstdio>
#include<vector>
#include<bitset>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int a,b;
int n,m;
int f[1010][1010][12];
int g[1010][1010][12];
int ans=1e9+7;
int main()
{
scanf("%d%d%d",&a,&b,&n);
for(int i=1;i<=a;i++)
{
for(int j=1;j<=b;j++)
{
scanf("%d",&f[i][j][0]);
g[i][j][0]=f[i][j][0];
}
}
for(int k=1;k<=10;k++)
{
for(int i=1;i<=a;i++)
{
for(int j=1;j<=b;j++)
{
if(i<(1<<k)||j<(1<<k))
{
continue;
}
f[i][j][k]=max(max(f[i][j][k-1],f[i-(1<<(k-1))][j-(1<<(k-1))][k-1]),max(f[i-(1<<(k-1))][j][k-1],f[i][j-(1<<(k-1))][k-1]));
g[i][j][k]=min(min(g[i][j][k-1],g[i-(1<<(k-1))][j-(1<<(k-1))][k-1]),min(g[i-(1<<(k-1))][j][k-1],g[i][j-(1<<(k-1))][k-1]));
}
}
}
for(int i=0;;i++)
{
if((1<<i)<=n)
{
m=i;
}
else
{
break;
}
}
for(int i=n;i<=a;i++)
{
for(int j=n;j<=b;j++)
{
int mx=max(max(f[i][j][m],f[i-n+(1<<m)][j-n+(1<<m)][m]),max(f[i][j-n+(1<<m)][m],f[i-n+(1<<m)][j][m]));
int mn=min(min(g[i][j][m],g[i-n+(1<<m)][j-n+(1<<m)][m]),min(g[i][j-n+(1<<m)][m],g[i-n+(1<<m)][j][m]));
ans=min(mx-mn,ans);
}
}
printf("%d",ans);
}

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

  1. [BZOJ1047][HAOI2007]理想的正方形 二维单调队列

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1047 我们对每矩阵的一列维护一个大小为$n$的单调队列,队中元素为矩阵中元素.然后扫描每一 ...

  2. bzoj1047 [HAOI2007]理想的正方形——二维单调队列

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1047 就是先对行做一遍单调队列,再对那个结果按列做一遍单调队列即可. 代码如下: #incl ...

  3. 【BZOJ1047】[HAOI2007]理想的正方形 (倍增ST表)

    [HAOI2007]理想的正方形 题目描述 有一个\(a*b\)的整数组成的矩阵,现请你从中找出一个\(n*n\)的正方形区域,使得该区域所有数中的最大值和最小值的差最小. 输入输出格式 输入格式: ...

  4. 洛谷 P2216 [HAOI2007]理想的正方形 || 二维RMQ的单调队列

    题目 这个题的算法核心就是求出以i,j为左上角,边长为n的矩阵中最小值和最大值.最小和最大值的求法类似. 单调队列做法: 以最小值为例: q1[i][j]表示第i行上,从j列开始的n列的最小值.$q1 ...

  5. [HNOI2007] 理想正方形 二维ST表

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

  6. 【bzoj1047】[HAOI2007]理想的正方形 二维RMQ

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

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

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

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

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

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

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

随机推荐

  1. Android学习之基础知识十—内容提供器(Content Provider)

    一.跨程序共享数据——内容提供器简介 内容提供器(Content Provider)主要用于在不同的应用程序之间实现数据共享的功能,它提供了一套完整的机制,允许一个程序访问另一个程序中的数据,同时还能 ...

  2. java从命令行接受多个数字求和输出

    一·设计思路 1.定义一个整型变量sum,用于接收和 2.利用循环将命令行数字求和 3.输出参数个数以及参数之和 二·流程图 三·程序源代码 public class JavaAppArguments ...

  3. 使用proxy来简单的实现一个观察者

    var obv = (function() { var cache = new Map(); var observe = function (proxy, fn) { if (!cache.has(p ...

  4. php利用自定义key,对数据加解密的方法

    客户端和服务端通信时,有个场景很常见,通过一个id作为url参数来回传递.假设现在业务上只有这个id标识,那么需要稍微安全一点的通信,对这个id进行加密传输,到服务端再进行解密.这里需要一个服务端进行 ...

  5. Bayesian Personalized Ranking 算法解析及Python实现

    1. Learning to Rank 1.1 什么是排序算法 为什么google搜索 ”idiot“ 后,会出现特朗普的照片? “我们已经爬取和存储了数十亿的网页拷贝在我们相应的索引位置.因此,你输 ...

  6. 校内模拟赛 Attack's Fond Of LeTri

    Attack's Fond Of LeTri 题意: n个房子m条路径边的无向图,每个房子可以最终容纳b个人,初始有a个人,中途超过可以超过b个人,每条边有一个长度,经过一条边的时间花费为边的长度.求 ...

  7. SSL踩坑ERR_SSL_VERSION_OR_CIPHER_MISMATCH

    最近公司项目开发了一个微信小程序,并且部署测试OK,由于微信小程序调用的后端接口必须是HTTPS,所以给接口安装了SSL,第一天测试都正常.第二天早上再使用时页面无响应. 抓包发现是后端接口抛出: n ...

  8. JVM规范系列第1章:引言

    如果你还没下载<Java虚拟机规范>这本书,那么先点击这里下载再一块儿看吧. 前言 Java 虚拟机是一个抽象化的机器,整个规范中提及的 Java 虚拟机都是抽象化的概念,而不是特指 Or ...

  9. Qt5.9使用QWebEngineView加载网页速度非常慢,问题解决

    折腾了大半天终于解决了 原帖地址:https://bugreports.qt.io/browse/QTBUG-44763 BUG单下的留言讲明了问题发生的原因,那就是系统默认设置为自动寻找代理,而使用 ...

  10. myeclipse、maven、tomcat、jdk技巧和坑【待完善】

    公司使用前后不分离或半分离的springmvc + maven ,自己不得不研究研究myeclipse.maven.tomcat等等 开发环境搭建:坑一: Unable to process Jar ...