洛谷P2216 HAOI2007 理想的正方形 (单调队列)
题目就是要求在n*m的矩形中找出一个k*k的正方形(理想正方形),使得这个正方形内最值之差最小(就是要维护最大值和最小值),显然我们可以用单调队列维护。
但是二维平面上单调队列怎么用?
我们先对行处理,将其压缩为一个(n-k+1)*m的矩形;再对列进行处理,最终压缩为一个(n-k+1)*(m-k+1)的矩形,枚举最大与最小之差,更新答案即可。
1 #include<bits/stdc++.h>
2 using namespace std;
3 const int N=1e3+1;
4 int n,m,k,a[N][N],ans;
5 int qmax[N],qmin[N],h1,t1,h2,t2;
6 int Max1[N][N],Min1[N][N],Max2[N][N],Min2[N][N];
7 int main(){
8 scanf("%d%d%d",&n,&m,&k);
9 for(int i=1;i<=n;i++)
10 for(int j=1;j<=m;j++)
11 scanf("%d",&a[i][j]);
12
13 for(int i=1;i<=n;i++){
14 h1=1,t1=0,h2=1,t2=0;
15 qmax[++t1]=1;qmin[++t2]=1;
16 for(int j=2;j<=m;j++){
17 while(h1<=t1 && a[i][j]>=a[i][qmax[t1]]) t1--;
18 qmax[++t1]=j;
19 while(h2<=t2 && a[i][j]<=a[i][qmin[t2]]) t2--;
20 qmin[++t2]=j;
21 while(h1<=t1 && qmax[h1]<j-k+1) h1++;
22 while(h2<=t2 && qmin[h2]<j-k+1) h2++;
23 if(j>=k){
24 Max1[i][j-k+1]=a[i][qmax[h1]];
25 Min1[i][j-k+1]=a[i][qmin[h2]];
26 }
27 }
28 }
29
30 for(int j=1;j<=m-k+1;j++){
31 h1=1,t1=0,h2=1,t2=0;
32 qmax[++t1]=1;qmin[++t2]=1;
33 for(int i=2;i<=n;i++){
34 while(h1<=t1 && Max1[i][j]>=Max1[qmax[t1]][j]) t1--;
35 qmax[++t1]=i;
36 while(h2<=t2 && Min1[i][j]<=Min1[qmin[t2]][j]) t2--;
37 qmin[++t2]=i;
38 while(h1<=t1 && qmax[h1]<i-k+1) h1++;
39 while(h2<=t2 && qmin[h2]<i-k+1) h2++;
40 if(i>=k){
41 Max2[i-k+1][j]=Max1[qmax[h1]][j];
42 Min2[i-k+1][j]=Min1[qmin[h2]][j];
43 }
44
45 }
46 }
47 ans=0x3f3f3f3f;
48 for(int i=1;i<=n-k+1;i++)
49 for(int j=1;j<=m-k+1;j++)
50 ans=min(ans,Max2[i][j]-Min2[i][j]);
51 cout<<ans;
52 }
用了不知多少次的单调队列,最终压缩的矩形中每个格子代表的意义是:以它为右下角的n*n的正方形。
洛谷P2216 HAOI2007 理想的正方形 (单调队列)的更多相关文章
- 洛谷P2216: [HAOI2007]理想的正方形 单调队列优化DP
洛谷P2216 )逼着自己写DP 题意: 给定一个带有数字的矩阵,找出一个大小为n*n的矩阵,这个矩阵中最大值减最小值最小. 思路: 先处理出每一行每个格子到前面n个格子中的最大值和最小值.然后对每一 ...
- 洛谷 P2216 [HAOI2007]理想的正方形
P2216 [HAOI2007]理想的正方形 题目描述 有一个a*b的整数组成的矩阵,现请你从中找出一个n*n的正方形区域,使得该区域所有数中的最大值和最小值的差最小. 输入输出格式 输入格式: 第一 ...
- P2216 [HAOI2007]理想的正方形 (单调队列)
题目链接:P2216 [HAOI2007]理想的正方形 题目描述 有一个 \(a\times b\)的整数组成的矩阵,现请你从中找出一个 \(n\times n\)的正方形区域,使得该区域所有数中的最 ...
- 洛谷 P2216 [HAOI2007]理想的正方形 || 二维RMQ的单调队列
题目 这个题的算法核心就是求出以i,j为左上角,边长为n的矩阵中最小值和最大值.最小和最大值的求法类似. 单调队列做法: 以最小值为例: q1[i][j]表示第i行上,从j列开始的n列的最小值.$q1 ...
- 【DP】【单调队列】洛谷 P2216 [HAOI2007]理想的正方形 题解
算是单调队列的复习吧,不是很难 题目描述 有一个$a\times b$的整数组成的矩阵,现请你从中找出一个$n\times n$的正方形区域,使得该区域所有数中的最大值和最小值的差最小. 输入 ...
- [洛谷P2216][HAOI2007]理想的正方形
题目大意:有一个$a\times b$的矩阵,求一个$n\times n$的矩阵,使该区域中的极差最小. 题解:二维$ST$表,每一个点试一下是不是左上角就行了 卡点:1.用了一份考试时候写的二维$S ...
- 洛谷 P2216 [HAOI2007]理想正方形
洛谷 巨说这是一道单调队列好题,但是我并不是用单调队列做的诶. 如果往最暴力的方向去想,肯定是\(n^3\)的\(dp\)了. \(f[i][j][k]\)代表当前正方形的左上角定点是\((i,j)\ ...
- BZOJ1047: [HAOI2007]理想的正方形 [单调队列]
1047: [HAOI2007]理想的正方形 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2857 Solved: 1560[Submit][St ...
- bzoj 1047 : [HAOI2007]理想的正方形 单调队列dp
题目链接 1047: [HAOI2007]理想的正方形 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2369 Solved: 1266[Submi ...
随机推荐
- 渲染优化中那些奇奇怪怪的rules
禁⽌使⽤ iframe iframe 会阻塞主⻚⾯的 Onload 事件 搜索引擎的检索程序⽆法解读这种⻚⾯,不利于 SEO iframe 和主⻚⾯共享连接池,⽽浏览器对相同域的连接有限制,所以会影响 ...
- RSA算法概述
RSA算法的概述(个人理解,欢迎纠正) RSA是一种基于公钥密码体制的优秀加密算法,1978年由美国(MIT)的李维斯特(Rivest).沙米尔(Shamir).艾德曼(Adleman)提的.RSA算 ...
- Linux 用户管理相关命令
1 sudo adduser username # 添加用户 2 sudo adduser --system username # 添加系统用户 3 sudo deluser username # 删 ...
- WPF开发随笔收录-WriteableBitmap绘制高性能曲线图
一.前言 之前分享过一期关于DrawingVisual来绘制高性能曲线的博客,今天再分享一篇通过另一种方式来绘制高性能曲线的方法,也就是通过WriteableBitmap的方式:具体的一些细节这里就不 ...
- 万答#6,MySQL最多只能用到128个逻辑CPU,是真的吗
GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 江湖传言MySQL最多只能用到128个逻辑CPU,是真的吗? 同事从客户现场回来,委屈巴巴的说,某PG服务商告诉客户&qu ...
- SQL Server查询优化
从上至下优化 看过一篇文章,印象深刻,里面将数据库查询优化分为四个大的方向 使用钞能力--给DB服务器加物理配置,内存啊,CPU啊,硬盘啊,全上顶配 替换存储系统--根据实际的业务情况选择不同的存储数 ...
- Spring的简单使用(3)
一:SM框架的整合: 所需要的依赖: <dependency> <groupId>junit</groupId> <artifactId>junit&l ...
- P2501 [HAOI2006]数字序列 (LIS,DP)(未完成)
第二问好迷... #include "Head.cpp" #include <vector> const int N = 35007; vector<int> ...
- Vue3 + Socket.io + Knex + TypeScript 实现可以私聊的聊天室
前言 下文只在介绍实现的核心代码,没有涉及到具体的实现细节,如果感兴趣可以往下看,在文章最后贴上了仓库地址.项目采用前后端模式,前端使用 Vite + Vue3 + TS:后端使用 Knex + Ex ...
- 技术管理进阶——技术Leader需要数据思维
原创不易,求分享.求一键三连 假设我长得很漂亮,拥有众多追求者,但是初出闺房的我对这世界上的男人毫无认知,那么该如何选择呢?这真是一个问题! 妈妈说,愿意为我花钱的男人未必爱我,但不愿意为我花钱的男人 ...