Solution

二维单调队列, 这个数组套起来看得我眼瞎。。。

Code

  1. #include<cstdio>
  2. #include<algorithm>
  3. #include<cstring>
  4. #define rd read()
  5. #define rep(i,a,b) for(register int i = (a); i <= (b); ++i)
  6. #define per(i,a,b) for(register int i = (a); i >= (b); --i)
  7. #define Lb lb[i]
  8. #define Rb rb[i]
  9. #define Ls ls[i]
  10. #define Rs rs[i]
  11. using namespace std;
  12.  
  13. const int N = 1e3 + ;
  14. const int inf = ~0U >> ;
  15.  
  16. int n, m, len, a[N][N];
  17. int qb[N][N], lb[N], rb[N];
  18. int qs[N][N], ls[N], rs[N];
  19.  
  20. int qB[N], LB, RB;
  21. int qS[N], LS, RS;
  22.  
  23. int ans = inf;
  24.  
  25. int read() {
  26. int X = , p = ; char c = getchar();
  27. for(; c > '' || c < ''; c = getchar()) if(c == '-') p = -;
  28. for(; c >= '' && c <= ''; c = getchar()) X = X * + c - '';
  29. return X * p;
  30. }
  31.  
  32. int main()
  33. {
  34. n = rd; m = rd; len = rd;
  35. rep(i, , n) rep(j, , m) a[i][j] = rd;
  36. rep(i, , n) ls[i] = lb[i] = ;
  37. rep(j, , m) {
  38. rep(i, , n) {
  39. while(qb[i][Lb] <= j - len && Lb <= Rb) Lb++;
  40. while(qs[i][Ls] <= j - len && Ls <= Rs) Ls++;
  41.  
  42. while(Lb <= Rb && a[i][qb[i][Rb]] <= a[i][j]) Rb--;
  43. while(Ls <= Rs && a[i][qs[i][Rs]] >= a[i][j]) Rs--;
  44. qb[i][++Rb] = j;
  45. qs[i][++Rs] = j;
  46. }
  47. LS = LB = ;
  48. RB = RS = ;
  49. if(j >= len)
  50. rep(i, , n) {
  51. while(qB[LB] <= i - len && LB <= RB) LB++;
  52. while(qS[LS] <= i - len && LS <= RS) LS++;
  53.  
  54. while(LB <= RB && a[qB[RB]][qb[qB[RB]][lb[qB[RB]]]] <= a[i][qb[i][Lb]]) RB--;
  55. while(LS <= RS && a[qS[RS]][qs[qS[RS]][ls[qS[RS]]]] >= a[i][qs[i][Ls]]) RS--;
  56. qB[++RB] = i;
  57. qS[++RS] = i;
  58. int hb = qB[LB], hs = qS[LS];
  59. if(i >= len) ans = min(ans, a[hb][qb[hb][lb[hb]]] - a[hs][qs[hs][ls[hs]]]);
  60. }
  61. }
  62. printf("%d\n", ans);
  63. }

Luogu 2216[HAOI2007]理想的正方形 - 单调队列的更多相关文章

  1. [Luogu 2216] [HAOI2007]理想的正方形

    [Luogu 2216] [HAOI2007]理想的正方形 题目描述 有一个a*b的整数组成的矩阵,现请你从中找出一个n*n的正方形区域,使得该区域所有数中的最大值和最小值的差最小. 输入输出格式 输 ...

  2. BZOJ1047: [HAOI2007]理想的正方形 [单调队列]

    1047: [HAOI2007]理想的正方形 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2857  Solved: 1560[Submit][St ...

  3. bzoj 1047 : [HAOI2007]理想的正方形 单调队列dp

    题目链接 1047: [HAOI2007]理想的正方形 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2369  Solved: 1266[Submi ...

  4. BZOJ 1047: [HAOI2007]理想的正方形( 单调队列 )

    单调队列..先对每一行扫一次维护以每个点(x, y)为结尾的长度为n的最大最小值.然后再对每一列扫一次, 在之前的基础上维护(x, y)为结尾的长度为n的最大最小值. 时间复杂度O(ab) (话说还是 ...

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

    题目链接:P2216 [HAOI2007]理想的正方形 题目描述 有一个 \(a\times b\)的整数组成的矩阵,现请你从中找出一个 \(n\times n\)的正方形区域,使得该区域所有数中的最 ...

  6. Luogu 2216 [HAOI2007]理想的正方形 (单调队列优化)

    题意: 给出一个 N×M 的矩阵,以及一个数值 K ,求在给定的矩阵中取出一个 K×K 的矩阵其中最大值减去最小值的最小值. 细节: 没有细节来发暴力走天下,20分也是分啊~~~ QAQ. 分析: 感 ...

  7. BZOJ 1047: [HAOI2007]理想的正方形 单调队列瞎搞

    题意很简明吧? 枚举的矩形下边界和右端点即右下角,来确定矩形位置: 每一个纵列开一个单调队列,记录从 i-n+1 行到 i 行每列的最大值和最小值,矩形下边界向下推移的时候维护一下: 然后在记录的每一 ...

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

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

  9. 洛谷P2216: [HAOI2007]理想的正方形 单调队列优化DP

    洛谷P2216 )逼着自己写DP 题意: 给定一个带有数字的矩阵,找出一个大小为n*n的矩阵,这个矩阵中最大值减最小值最小. 思路: 先处理出每一行每个格子到前面n个格子中的最大值和最小值.然后对每一 ...

随机推荐

  1. java-学习1

    作为一个想要深入的程序猿,只是学习前端是不够的,我总结我的前端工作是围绕着html.css.js展开写的再好也是展现在表面,所以 我想学习一门能够深入的后台语言,想来想去我还是选择java作为以后深入 ...

  2. linux下面设置密码失效参考

    chage -E 2005-12-31 user1 设置用户口令的失效期限

  3. Centos7 安装 erlang rabbitmq

    1.安装Erlang依赖采用官网的rpm包的形式进行安装,不采用yum(由系统进行自动安装 可能因为版本低的问题而出现一系列问题) erlang依赖 rpm包下载地址https://github.co ...

  4. Typechecking With PropTypes

    [Typechecking With PropTypes] 1.props类型检查 React has some built-in typechecking abilities. To run typ ...

  5. 解题4(NumberToEnglish )

    题目描述 Jessi初学英语,为了快速读出一串数字,编写程序将数字转换成英文: 如22:twenty two,123:one hundred and twenty three. 说明: 数字为正整数, ...

  6. GsonFormat的使用 (转)

    一.Android Studio快速添加Gson 具体操作:        1.File->Project Structure:   2.app->Dependencies->&qu ...

  7. PyCon大会Python主题演讲摘要

    PyCon 是全国际最大的以 Python 编程言语 为主题的技能大会.大会由 Python 社区组织,每年举行一次.在大会上,来自国际各地的 Python 用户与中心开发者齐聚一堂,共同同享 Pyt ...

  8. Java Web开发和Python Web开发之间的区别

    今天的文章讨论了Java Web开发和Python Web开发之间的区别.我不鼓励我们在这里从Java Web迁移到Python Web开发.我只是想谈谈我的感受.它不一定适合所有情况,仅供我们参考. ...

  9. 第十一章 串 (c2)KMP算法:查询表

  10. SSH 连接很慢

    相信很多朋友在使用Linux系统的时候因为安全性的原因摒弃了telnet rlogin 或者 X-window,而把openssh作为自己默认的远程登录方式.然而经常会遇到的一个情况是telnet到s ...