首页 > TAG信息列表 > P2216

洛谷P2216 HAOI2007 理想的正方形 (单调队列)

题目就是要求在n*m的矩形中找出一个k*k的正方形(理想正方形),使得这个正方形内最值之差最小(就是要维护最大值和最小值),显然我们可以用单调队列维护。 但是二维平面上单调队列怎么用? 我们先对行处理,将其压缩为一个(n-k+1)*m的矩形;再对列进行处理,最终压缩为一个(n-k+1)*(m-k+1)的矩形,枚举最大

P2216 [HAOI2007]理想的正方形

题面 有一个 \(a \times b\) 的整数组成的矩阵,现请你从中找出一个 \(n \times n\) 的正方形区域,使得该区域所有数中的最大值和最小值的差最小。 输入格式 第一行为 \(3\) 个整数,分别表示 \(a,b,n\) 的值。 第二行至第 \(a+1\) 行每行为 \(b\) 个非负整数,表示矩阵中相应位置上的数

P2216 [HAOI2007]理想的正方形

题目描述 有一个 \(a \times b\) 的整数组成的矩阵,现请你从中找出一个 \(n \times n\)的正方形区域,使得该区域所有数中的最大值和最小值的差最小。 输入格式 第一行为 \(3\) 个整数,分别表示 \(a,b\) 的值。 第二行至第 \(a+1\) 行每行为 \(b\) 个非负整数,表示矩阵中相应位置上的数

洛谷P2216 理想的正方形

题目 有可以直接找\(maxn[i][j][t]\)为\((i,j)\)为左下角长度为t的正方形内的最大值。 然后可以有以下转移: \(maxn[i][j][t] = Max(maxn[i + 1][j][t-1], maxn[i][j][t-1], maxn[i][j + 1][t-1], maxn[i + 1][j + 1][t-1]);\) 然后考虑滚动数组,最后答案直接枚举即可。 #include <b

luogu P2216 [HAOI2007]理想的正方形

二维RMQ问题模板。。。(虽然我用单调队列加一维RMQ过的,,,但这个更方便一些,就再拿出来写写。。跑的还快一点。。) 和一维差不多,只不过需要比较四个区域罢了。。 g[i][j][k]=max(g[i][j][k-1],max(g[i+(1<<(k-1))][j][k-1],max(g[i][j+(1<<(k-1))][k-1],g[i+(1<<(k-1))][j+(1<<(k-1))]

P2216 [HAOI2007]理想的正方形 单调队列

   题目描述 有一个a*b的整数组成的矩阵,现请你从中找出一个n*n的正方形区域,使得该区域所有数中的最大值和最小值的差最小。 输入格式 第一行为3个整数,分别表示a,b,n的值 第二行至第a+1行每行为b个非负整数,表示矩阵中相应位置上的数。每行相邻两数之间用一空格分隔。 输出格

P2216 [HAOI2007]理想的正方形

P2216 [HAOI2007]理想的正方形   题目描述 有一个a*b的整数组成的矩阵,现请你从中找出一个n*n的正方形区域,使得该区域所有数中的最大值和最小值的差最小。 a,b<=1000   分析题目: 首先可以想到一个O(a*b*n) 的解法: 我最开始想的办法是预处理递推出矩形中的最大值和最小值,即:用max