题目大意:有一个$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;
}

  

最新文章

  1. 在测试框架中使用Log4J 2
  2. MyEclipse 启动 tomcate 失败 解决方法
  3. iOS开发-- 创建podspec文件,为自己的项目添加pod支持
  4. poj1276 多重背包
  5. 第二百六十一、二天 how can I坚持
  6. Atom编辑器入门到精通(六) Markdown支持
  7. vimium快捷键列表
  8. ios消息的交互方式
  9. js中的typeof
  10. 在Windows下使用Hexo+GithubPage搭建博客的过程
  11. ASP.NET Core:CMD命令行+记事本 创建Console程序和Web Application
  12. JavaScript ,Python,java,C#,Go系列算法之【插入排序篇】
  13. C++ qsort
  14. 剑指Offer——知识点储备--Linux基本命令+Makefile
  15. UVA 679 二叉树
  16. python:python之禅
  17. HanLP极致简繁转换详细讲解
  18. std::thread 不 join
  19. 【Win10】实现 ListViewBase 平滑滚动
  20. Go_16:GoLang中flag标签使用

热门文章

  1. 解决nsis error!cant initialize plug-ins directory.please try again later
  2. PXE自动化安装CentOS6/7
  3. Servlet学习笔记07——什么是cookie,session?
  4. datatable 默认按某字段排序
  5. Linux下常用压缩 解压命令与压缩比率对比
  6. yii2深入理解之内核解析
  7. MySQL基础 (麦子学员 php 第二阶段)
  8. python中的文件操作小结2
  9. 第三章 文件 I/O
  10. SAPバリアント