题意

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

思路

RMQ求

再DP

代码

#include<cstdio>
#include<cmath>
#define max(a,b) (a>b?a:b)
#define min(a,b) (a<b?a:b)
using namespace std;
#define N 1005
int a,b,n;
int m[N][N];
int ans=0x3fffffff;
int Min[N][N][],Max[N][N][];
void rmq()
{
for(int i=;i<=a;++i)for(int j=;j<=b;++j)Min[i][j][]=Max[i][j][]=m[i][j];
for(int k=;k<=;++k)
for(int i=;i<=a-(<<k)+;++i){
for(int j=;j<=b-(<<k)+;++j)
{
Max[i][j][k]=max(max(Max[i][j][k-],Max[i+(<<k-)][j][k-]),max(Max[i][j+(<<k-)][k-],Max[i+(<<k-)][j+(<<k-)][k-]));
Min[i][j][k]=min(min(Min[i][j][k-],Min[i+(<<k-)][j][k-]),min(Min[i][j+(<<k-)][k-],Min[i+(<<k-)][j+(<<k-)][k-]));
}
}
}
int Qr(int x,int y,int xx,int yy)
{
int len=log2(xx-x);
int maxx=max(max(Max[x][y][len],Max[xx-(<<len)+][y][len]),max(Max[x][yy-(<<len)+][len],Max[xx-(<<len)+][yy-(<<len)+][len]));
int minn=min(min(Min[x][y][len],Min[xx-(<<len)+][y][len]),min(Min[x][yy-(<<len)+][len],Min[xx-(<<len)+][yy-(<<len)+][len]));
return maxx-minn; }
int main()
{
scanf("%d%d%d",&a,&b,&n);
for(int i=;i<=a;++i)
for(int j=;j<=b;++j)
scanf("%d",&m[i][j]);
rmq();
for(int i=n;i<=a;++i)
for(int j=n;j<=b;++j)
ans=min(ans,Qr(i-n+,j-n+,i,j));
printf("%d\n",ans);
return ;
}

[BZOJ1047][HAOI2007]理想的正方形(RMQ+DP)的更多相关文章

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

    1047: [HAOI2007]理想的正方形 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2857  Solved: 1560[Submit][St ...

  2. bzoj千题计划215:bzoj1047: [HAOI2007]理想的正方形

    http://www.lydsy.com/JudgeOnline/problem.php?id=1047 先用单调队列求出每横着n个最大值 再在里面用单调队列求出每竖着n个的最大值 这样一个位置就代表 ...

  3. [bzoj1047][HAOI2007]理想的正方形_动态规划_单调队列

    理想的正方形 bzoj-1047 HAOI-2007 题目大意:有一个a*b的整数组成的矩阵,现请你从中找出一个n*n的正方形区域,使得该区域所有数中的最大值和最小值的差最小. 注释:$2\le a, ...

  4. [Bzoj1047][HAOI2007]理想的正方形(ST表)

    题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1047 题目虽然有一个n的限制,但求二维区间最值首先想到的还是RMQ,但是如果按照往常RM ...

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

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

  6. BZOJ1047: [HAOI2007]理想的正方形

    传送门 蛤省省选果然水啊,我这种蒟蒻都能一遍A. 横向纵向维护两个单调队列,做两次求最大和最小的,总复杂度$O(NM)$ 码农题,考察代码实现能力 //BZOJ 1047 //by Cydiater ...

  7. P2216 [HAOI2007]理想的正方形(dp+单调队列优化)

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

  8. 【单调队列】bzoj1047 [HAOI2007]理想的正方形

    先把整个矩阵处理成b[n][m-K+1].c[n][m-K+1]大小的两个矩阵,分别存储每行每K个数中的最大.最小值,然后再通过b.c处理出d.e分别表示K*K大小的子矩阵中的最大.最小值即可.单调队 ...

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

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

随机推荐

  1. IntelliJ IDEA 的默认文件编码

    建好项目,首先注意改项目默认编码 File->Settings(快捷键Ctrl+Alt+S)->Editor->File Encodings File->Other Setti ...

  2. WordPress plugin Contact Form [CSRF → LFI] vulnerable 2019-03-17

    # Exploit Title: Contact Form by WD [CSRF → LFI]# Date: 2019-03-17# Exploit Author: Panagiotis Vagen ...

  3. vagrant极简教程:快速搭建centos7

    作为开发人员,只要你的应用最终是放在linux环境执行,那么最好就是将本地开发环境也线上一致.不管是用windows系统,还是mac系统,即使你本地程序跑得好好的,也经常会出现一上线就各种bug的现象 ...

  4. react项目构建

    1.react脚手架 npm install -g create-react-app create-react-app myproject 2.页面配置(bootcdn) <script src ...

  5. sql注入中关于--+的一点探索

    在sql-labs游戏中,经常使用--+放在最后注释多余部分,而mysql中的注释符为#和-- 却不能直接使用,以前没学过mysql,一直不理解,也不知道+号的作用,今天有时间特地探索了一下,算是搞明 ...

  6. Numpy 多维数组简介

     NumPy是一个功能强大的Python库,主要用于对多维数组执行计算.NumPy这个词来源于两个单词-- Numerical和Python.NumPy提供了大量的库函数和操作,可以帮助程序员轻松地 ...

  7. PyCharm 项目删除

    Pycharm 删除项目具体操作如下: 1.选择菜单 File   close project 2.选择要删除的项目右上角选择× 3.找到项目所在目录,删除相应文件夹 之后再次打开pycharm 发现 ...

  8. Python logging日志系统

    写我小小的日志系统 配置logging有以下几种方式: 1)使用Python代码显式的创建loggers, handlers和formatters并分别调用它们的配置函数: 2)创建一个日志配置文件, ...

  9. pads layout 自动打地孔

    对于PCBLayout来说,后期处理也是一项费时操作,比如为了让板子耦合的更好,会在板子空旷位置打上很多地过孔.“自动打地孔”则会让你省时又省心,一不小心就提前了工期哦,哈哈! 一.下面打开一个简单的 ...

  10. Object.defineProperty()属性介绍

    对象是由多对key/value组成得无序集合,通过object.key=value来设置属性外,还可通过Object.defineProperty定义新属性或修改原有的属性. 语法:Object.de ...