题意

有一个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. luogu P5323 [BJOI2019]光线

    传送门 先考虑\(n=1\)的情况不是输入数据都告诉你了吗 然后考虑\(n=2\),可以光线是在弹来弹去的废话,然后射出去的光线是个等比数列求和的形式,也就是\(x_1\sum_{i=1}^{\inf ...

  2. ansible初识

    ansible: 运维自动化的工具, 基本功能, 基于ssh远程连接, 连接验证(ssh-keygen ssh-copy-id  ip) 下载: 1. 安装epel源 wget -O /etc/yum ...

  3. Linux服务器查看外网IP地址的命令

    可以直接输入如下几个命令:1.curl ifconfig.me2.curl cip.cc3.curl icanhazip.com4.curl ident.me5.curl ipecho.net/pla ...

  4. Arduino语言简介

    参考链接:https://www.cnblogs.com/xczr/p/7831343.html

  5. django+vue

    django安装配置方式略过 1.安装node.js,官网地址:https://nodejs.org/zh-cn/download/ 2.cd到项目目录下,执行npm install -g vue-c ...

  6. Gitlab_ansible_jenkins三剑客②Gitlab的后台管理

    系统信息和日志 健康状态 使用gitlab的用户管理和审批功能 创建用户 创建一个lead普通账号 进入test-repo仓库 这样就把dev添加到了test-repo这个项目中,并且有了develo ...

  7. 部署自建CA颁发证书实现https加密

    理论忽略:百度上很多 需求:自建证书并实现域名的https加密 部署: 在linux机器上执行以下命令生成私钥 mkdir -p /opt/ssl-cert cd  /opt/ssl-cert 1.# ...

  8. python学习记录20181220

    1.pycharm中,有个快捷键,输入完成后 按Ctrl+Alt+L就可以自动添加空格

  9. thymleaf th:if判断某值不为空

    简单描述:判断后台传递过来的值,是否为空,来做一些业务上的处理. 代码: <div class="col-md-6" th:if="${not #strings.i ...

  10. GIT----IDEA配置git

    配置git 创建本地厂库 可以选中项目所在的目录下 此时发现所有的页面的文件都变红,是因为变红的文件还没有add 添加提交的项目(add) 选中提交的文件右击,git ,add 如果想把整个项目都ad ...