P2216 [HAOI2007]理想的正方形

题目描述

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

a,b<=1000

分析题目: 首先可以想到一个O(a*b*n) 的解法:

我最开始想的办法是预处理递推出矩形中的最大值和最小值,即:用maxv(i,j,k)表示以点(i,j)为左上角的边长为k的矩形中的最大值,然后用递推公式

maxv[i][j] = max(grid[i][j], max(maxv[i+1][j+1], max(maxv[i+1][j], maxv[i][j+1])));

但是只有50分,接下来,有两种优化方法:

1.把n转化为log(n),用RMQ(倍增)

2.单调队列:每一行O(b)处理,然后每一列O(a)处理,复杂度应为O(a*b)

代码:

#include <cstdio>
#include <cstring>
#include <iostream>
#include <cctype>
#include <algorithm>
#include <cmath>
using namespace std;#define res register int
#define getchar gc
char buf[1<<18],*fc,*tc;
inline char gc()
{if(fc==tc){tc=(fc=buf)+fread(buf,1,1<<18,stdin);if(tc==fc) return EOF;}return *fc++;
}
inline int read()
{int x=0,f=1; char ch;while(!isdigit(ch=getchar())) if(ch=='-') f=-1;while(isdigit(ch)) x=x*10+ch-'0',ch=getchar();return f*x;
}const int N=1005,inf=0x3f3f3f3f;
int a,b,n;
int mp[N][N],X[N][N],x[N][N],Y[N][N],y[N][N];
//大写最大值,小写最小值
//x[i][j]:第i行j~j+n-1的最小值
//y[i][j]:从mp[i~i+n-1][j~j+n-1]的最小值 int Q[N],q[N],h,t,H,T;//head -> tail  单调  inline void solve()
{for(res i=1 ; i<=a ; ++i){h=t=H=T=Q[1]=q[1]=1;for(res j=2 ; j<=b ; ++j){while(H<=T&&mp[i][j]>=mp[i][Q[T]]) --T;//维护单调性 while(h<=t&&mp[i][j]<=mp[i][q[t]]) --t;q[++t]=j; Q[++T]=j;    //维护大小 while(j-Q[H]>=n) ++H;  while(j-q[h]>=n) ++h;if(j>=n) X[i][j-n+1]=mp[i][Q[H]],x[i][j-n+1]=mp[i][q[h]]; }}for(res j=1 ; j+n-1<=b ; ++j)//维护j~j+n-1列 {h=t=H=T=Q[1]=q[1]=1;for(res i=2 ; i<=a ; ++i){while(H<=T&&X[i][j]>=X[Q[T]][j]) --T;while(h<=t&&x[i][j]<=x[q[t]][j]) --t;Q[++T]=i; q[++t]=i;while(i-Q[H]>=n) ++H;while(i-q[h]>=n) ++h;if(i>=n) Y[i-n+1][j]=X[Q[H]][j],y[i-n+1][j]=x[q[h]][j];}}
}int main()
{a=read(); b=read(); n=read();for(res i=1 ; i<=a ; ++i) for(res j=1 ; j<=b ; ++j) mp[i][j]=read();solve();int ans=inf;for(res i=1 ; i+n-1<=a ; ++i)for(res j=1 ; j+n-1<=b ; ++j)ans=min(ans,Y[i][j]-y[i][j]);printf("%d\n",ans);return 0;
}

  

转载于:https://www.cnblogs.com/wmq12138/p/10691168.html

P2216 [HAOI2007]理想的正方形相关推荐

  1. P2216 [HAOI2007]理想的正方形 ( 二维ST表 )

    题目链接:点击进入 题目 思路 maxx [ i ] [ j ] :左上角坐标 ( i , j ) ,边长为 2 k 2^k 2k 的正方形的最大值 minn [ i ] [ j ] :左上角坐标 ( ...

  2. luogu P2216 [HAOI2007]理想的正方形 递推+ST表

    题意:有一个a*b的整数组成的矩阵,现请你从中找出一个n*n的正方形区域,使得该区域所有数中的最大值和最小值的差最小. 数据规模: (1)矩阵中的所有数都不超过1,000,000,000 (2)20% ...

  3. P2216 [HAOI2007]理想的正方形(二维RMQ)

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

  4. 洛谷 P2216 [HAOI2007] 理想的正方形

    题目描述 有一个a*b的整数组成的矩阵,现请你从中找出一个n*n的正方形区域,使得该区域所有数中的最大值和最小值的差最小. [题目分析] 单调队列优化DP [代码] #include <cstd ...

  5. [HAOI2007] 理想的正方形

    洛谷题目链接:[HAOI2007]理想的正方形 题目描述 有一个ab的整数组成的矩阵,现请你从中找出一个nn的正方形区域,使得该区域所有数中的最大值和最小值的差最小. 输入输出格式 输入格式: 第一行 ...

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

    1047: [HAOI2007]理想的正方形 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 3324  Solved: 1828 [Submit][ ...

  7. [BZOJ 1047] [HAOI2007] 理想的正方形 【单调队列】

    题目链接:BZOJ - 1047 题目分析 使用单调队列在 O(n^2) 的时间内求出每个 n * n 正方形的最大值,最小值.然后就可以直接统计答案了. 横向有 a 个单调队列(代码中是 Q[1] ...

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

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

  9. [HAOI2007] 理想的正方形 (单调队列)

    题目链接 Solution MD,经过这道题,算是掌握单调队列了... 可以先预处理出点 \((i,j)\) 往上 \(n\) 的最大值和最小值. 然后再横着做一遍单调队列即可. Code #incl ...

最新文章

  1. Linux03-本地账户和组
  2. HttpClient+Jericho HTML Parser 实现网页的抓取
  3. string 相等 java_java中string相等问题(==与.equal的具体区别。求详细解释)
  4. JS应用之禁止抓屏、复制、打印
  5. linux ifconfig 命令详解
  6. 如何用JavaScript实现2+2=5?
  7. python turtle 绘图速度用函数会快吗_有趣的Python turtle绘图
  8. linux中UDP程序流程、客户端、服务端
  9. STM32之SDIO例程
  10. WebRTC之linux ARM64交叉编译(七)
  11. js for ubuntu
  12. Sigar 编译笔记
  13. 基于proteus的一个微程序CPU
  14. 一分钟先生: 程序员面试真经
  15. matlab求含参数一元三次方程,matlab 求解一元三次方程,带其他参数
  16. “老三论”与“新三论”
  17. RAS 在 x86 上的应用及 Linux 实现
  18. MFC 显示透明png图片
  19. GSM信令流程[转]相当不错
  20. 计算机控制实验PID数字控制器设计,实验二数字PID控制器的设计

热门文章

  1. 物理服务器向虚拟化无缝对接,服务器虚拟化下的网络变迁
  2. PHP双码率视频云转码服务网站源码 支持M3u8秒切
  3. 百度SEO进云jys系统应用开发框架
  4. oracle 1408,Oracle 11.2.0.2 Patch 说明
  5. IDEA配置Docker一键部署SpringBoot项目(企业级做法)
  6. Microsoft Visual Studio 2010 破解下载!
  7. 用 WebClient.UploadData 方法 上载文件数据
  8. 说说过游戏保护(4)
  9. Interlocked..::.Add 方法
  10. 在Windows 2003 IIS 6.0中配置PHP的运行环境(图)