[洛谷P2216][HAOI2007]理想的正方形
题目大意:有一个$a\times b$的矩阵,求一个$n\times n$的矩阵,使该区域中的极差最小。
题解:二维$ST$表,每一个点试一下是不是左上角就行了
卡点:1.用了一份考试时候写的二维$ST$表,是矩阵的,然后$MLE$
2.改了一下,$i,k$狂写错
C++ Code:
#include <cstdio>
#define maxn 1005
int S[maxn][maxn][11], M[maxn][maxn][11];
int n, m, p, K, P;
int LG[maxn], pw[maxn];
inline int max(int a, int b) {return a > b ? a : b;}
inline int min(int a, int b) {return a < b ? a : b;}
inline int getS(int a, int b) {
int c = a + p, d = b + p;
int l = max(S[a][b][K], S[c - P][b][K]),
r = max(S[a][d - P][K], S[c - P][d - P][K]);
return max(l, r);
}
inline int getM(int a, int b) {
int c = a + p, d = b + p;
int l = min(M[a][b][K], M[c - P][b][K]),
r = min(M[a][d - P][K], M[c - P][d - P][K]);
return min(l, r);
}
int main() {
scanf("%d%d%d", &n, &m, &p);
for (register int i = 1; i <= n; i++) {
for (register int j = 1; j <= m; j++) scanf("%d", &S[i][j][0]), M[i][j][0] = S[i][j][0];
}
LG[0] = -1; for (int i = 1; i < maxn; i++) LG[i] = LG[i >> 1] + 1; K = LG[p];
pw[0] = 1; for (int i = 1; i < 100; i++) pw[i] = pw[i - 1] * 2ll % 20040826; P = pw[K];
for (register int k = 1; k < 11; k++) {
for (register int i = 1; i <= n; i++) {
for (register int j = 1; j <= m; j++) {
S[i][j][k] = max(max(S[i][j][k - 1], S[i][min(m, j + pw[k - 1])][k - 1]),
max(S[min(n, i + pw[k - 1])][j][k - 1], S[min(n, i + pw[k - 1])][min(m, j + pw[k - 1])][k - 1]));
M[i][j][k] = min(min(M[i][j][k - 1], M[i][min(m, j + pw[k - 1])][k - 1]),
min(M[min(n, i + pw[k - 1])][j][k - 1], M[min(n, i + pw[k - 1])][min(m, j + pw[k - 1])][k - 1]));
}
}
}
int ans = 0x3f3f3f3f;
for (int i = 1; i <= n - p + 1; i++) {
for (int j = 1; j <= m - p + 1; j++) {
ans = min(ans, getS(i, j) - getM(i, j));
}
}
printf("%d\n", ans);
return 0;
}
[洛谷P2216][HAOI2007]理想的正方形的更多相关文章
- 洛谷 P2216 [HAOI2007]理想的正方形
P2216 [HAOI2007]理想的正方形 题目描述 有一个a*b的整数组成的矩阵,现请你从中找出一个n*n的正方形区域,使得该区域所有数中的最大值和最小值的差最小. 输入输出格式 输入格式: 第一 ...
- 洛谷P2216: [HAOI2007]理想的正方形 单调队列优化DP
洛谷P2216 )逼着自己写DP 题意: 给定一个带有数字的矩阵,找出一个大小为n*n的矩阵,这个矩阵中最大值减最小值最小. 思路: 先处理出每一行每个格子到前面n个格子中的最大值和最小值.然后对每一 ...
- 洛谷 P2216 [HAOI2007]理想的正方形 || 二维RMQ的单调队列
题目 这个题的算法核心就是求出以i,j为左上角,边长为n的矩阵中最小值和最大值.最小和最大值的求法类似. 单调队列做法: 以最小值为例: q1[i][j]表示第i行上,从j列开始的n列的最小值.$q1 ...
- 洛谷P2216 HAOI2007 理想的正方形 (单调队列)
题目就是要求在n*m的矩形中找出一个k*k的正方形(理想正方形),使得这个正方形内最值之差最小(就是要维护最大值和最小值),显然我们可以用单调队列维护. 但是二维平面上单调队列怎么用? 我们先对行处理 ...
- 【DP】【单调队列】洛谷 P2216 [HAOI2007]理想的正方形 题解
算是单调队列的复习吧,不是很难 题目描述 有一个$a\times b$的整数组成的矩阵,现请你从中找出一个$n\times n$的正方形区域,使得该区域所有数中的最大值和最小值的差最小. 输入 ...
- 洛谷 P2216 [HAOI2007]理想正方形
洛谷 巨说这是一道单调队列好题,但是我并不是用单调队列做的诶. 如果往最暴力的方向去想,肯定是\(n^3\)的\(dp\)了. \(f[i][j][k]\)代表当前正方形的左上角定点是\((i,j)\ ...
- BZOJ1047或洛谷2216 [HAOI2007]理想的正方形
BZOJ原题链接 洛谷原题链接 显然可以用数据结构或\(ST\)表或单调队列来维护最值. 这里采用单调队列来维护. 先用单调队列维护每一行的最大值和最小值,区间长为正方形长度. 再用单调队列维护之前维 ...
- 洛谷 2216 [HAOI2007]理想的正方形
题目戳这里 一句话题意 给你一个a×b的矩形,求一个n×n的子矩阵,矩阵里面的最大值和最小值之差最小. Solution 这个题目许多大佬都是单调队列,但是我不是很会,只好用了比较傻逼的方法: 首先我 ...
- P2216 [HAOI2007]理想的正方形 (单调队列)
题目链接:P2216 [HAOI2007]理想的正方形 题目描述 有一个 \(a\times b\)的整数组成的矩阵,现请你从中找出一个 \(n\times n\)的正方形区域,使得该区域所有数中的最 ...
随机推荐
- vue2.x结合百度UEditor富文本编辑器
1.首先下载UEditor源码(https://ueditor.baidu.com/website/),将整个文件放到static文件夹中 2.在src/components文件夹下创建公共组件UEd ...
- OB如何创建租户
一. 先导知识: 资源隔离是保证用户间相互不受影响的重要手段.数据库的资源隔离主要有以下方式: l 服务器隔离 l 数据库隔离:sqlserver.oceanbase.oracle ...
- CSS之美化页面
CSS之美化页面 <span></span> 标签 <span>行内定义一个区域 就是说一行可以被<span>划分多个小区域,从而实现某种特定效果.&l ...
- xml中Node和Element的区别
本文转载自:http://blog.csdn.net/wcydiyi/article/details/4432636点击打开链接 1.元素(Element)和结点(Node)的区别: ...
- request中的那些方法到底是干什么的?
最近做Java Web项目,在.jsp页面和servlet之间request和response还是有些混淆,查阅了一些资料,总结如下,方便以后使用: 首先,servlet接口是最基本的,提供的五个方法 ...
- POJ 3484 二分
Showstopper Description Data-mining huge data sets can be a painful and long lasting process if we a ...
- [CodeForces - 296D]Greg and Graph(floyd)
Description 题意:给定一个有向图,一共有N个点,给邻接矩阵.依次去掉N个节点,每一次去掉一个节点的同时,将其直接与当前节点相连的边和当前节点连出的边都需要去除,输出N个数,表示去掉当前节点 ...
- java线程安全总结 - 2 (转载)
原文地址:http://www.jameswxx.com/java/%E7%BA%BF%E7%A8%8B%E5%AE%89%E5%85%A8%E6%80%BB%E7%BB%93%EF%BC%88%E4 ...
- 修改 cmd 字体为 Consolas
windows 下的 cmd 窗口默认的字体有点难看,长时间使用操作 node.js 有点小疲劳,可以修改注册表替换字体为 Consolas,并且可以全屏 cmd 窗口,代码如下: Windows R ...
- dubbo-admin管理控制台的安装和使用
因为zookeeper只是一个黑框,我们无法看到是否存在了什么提供者或消费者,这时就要借助Dubbo-Admin管理平台来实时的查看,也可以通过这个平台来管理提者和消费者. dubbo下载及配置 du ...