传送门

1.先弄个单调队列求出每一行的区间为n的最大值最小值。

2.然后再搞个单调队列求1所求出的结果的区间为n的最大值最小值

3.最后扫一遍就行

懒得画图,自己体会吧。

——代码

  1. #include <cstdio>
  2. #include <iostream>
  3.  
  4. using namespace std;
  5.  
  6. const int MAXN = ;
  7. int a, b, n, h, t;
  8. long long c[MAXN][MAXN], q[MAXN], max1[MAXN][MAXN], min1[MAXN][MAXN], max2[MAXN][MAXN], min2[MAXN][MAXN], ans = ;
  9.  
  10. inline void work1(int k)
  11. {
  12. int i, j;
  13. h = , t = ;
  14. for(i = ; i <= b; i++)
  15. {
  16. while(h <= t && c[k][q[t]] > c[k][i]) t--;
  17. q[++t] = i;
  18. while(h <= t && q[h] <= i - n) h++;
  19. min1[k][i] = c[k][q[h]];
  20. }
  21. h = ; t = ;
  22. for(i = ; i <= b; i++)
  23. {
  24. while(h <= t && c[k][q[t]] < c[k][i]) t--;
  25. q[++t] = i;
  26. while(h <= t && q[h] <= i - n) h++;
  27. max1[k][i] = c[k][q[h]];
  28. }
  29. }
  30.  
  31. inline void work2(int k)
  32. {
  33. int i, j;
  34. h = , t = ;
  35. for(i = ; i <= a; i++)
  36. {
  37. while(h <= t && min1[q[t]][k] > min1[i][k]) t--;
  38. q[++t] = i;
  39. while(h <= t && q[h] <= i - n) h++;
  40. min2[i][k] = min1[q[h]][k];
  41. }
  42. h = ; t = ;
  43. for(i = ; i <= a; i++)
  44. {
  45. while(h <= t && max1[q[t]][k] < max1[i][k]) t--;
  46. q[++t] = i;
  47. while(h <= t && q[h] <= i - n) h++;
  48. max2[i][k] = max1[q[h]][k];
  49. }
  50. }
  51.  
  52. int main()
  53. {
  54. int i, j;
  55. scanf("%d %d %d", &a, &b, &n);
  56. for(i = ; i <= a; i++)
  57. for(j = ; j <= b; j++)
  58. scanf("%lld", &c[i][j]);
  59. for(i = ; i <= a; i++) work1(i);
  60. for(i = ; i <= b; i++) work2(i);
  61. for(i = n; i <= a; i++)
  62. for(j = n; j <= b; j++)
  63. ans = min(ans, max2[i][j] - min2[i][j]);
  64. printf("%lld", ans);
  65. return ;
  66. }

[luoguP2216] [HAOI2007]理想的正方形(二维单调队列)的更多相关文章

  1. [BZOJ1047][HAOI2007]理想的正方形 二维单调队列

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1047 我们对每矩阵的一列维护一个大小为$n$的单调队列,队中元素为矩阵中元素.然后扫描每一 ...

  2. bzoj1047 [HAOI2007]理想的正方形——二维单调队列

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1047 就是先对行做一遍单调队列,再对那个结果按列做一遍单调队列即可. 代码如下: #incl ...

  3. bzoj1047-理想的正方形(二维单调队列)

    题意: 给一个矩阵,给出行列和每个数,再给出一个N,求出所有N*N的子矩阵中最大值最小值之差的最小值解析: 暴力枚举肯定不行,这题可以用二维单调队列做,把同一行的连续N个点缩成一个点保存最大最小值预处 ...

  4. 洛谷 P2216 [HAOI2007]理想的正方形 || 二维RMQ的单调队列

    题目 这个题的算法核心就是求出以i,j为左上角,边长为n的矩阵中最小值和最大值.最小和最大值的求法类似. 单调队列做法: 以最小值为例: q1[i][j]表示第i行上,从j列开始的n列的最小值.$q1 ...

  5. BZOJ1047[HAOI2007]理想的正方形——二维ST表

    题目描述 有一个a*b的整数组成的矩阵,现请你从中找出一个n*n的正方形区域,使得该区域所有数中的最大值和最小值的差最小. 输入 第一行为3个整数,分别表示a,b,n的值第二行至第a+1行每行为b个非 ...

  6. 【bzoj1047】[HAOI2007]理想的正方形 二维RMQ

    题目描述 有一个a*b的整数组成的矩阵,现请你从中找出一个n*n的正方形区域,使得该区域所有数中的最大值和最小值的差最小. 输入 第一行为3个整数,分别表示a,b,n的值第二行至第a+1行每行为b个非 ...

  7. [HAOI2007]理想的正方形 st表 || 单调队列

    ~~~题面~~~ 题解: 因为数据范围不大,而且题目要求的是正方形,所以这道题有2种解法. 1,st表. 这种解法暴力好写好理解,但是较慢.我们设st[i][j][k]表示以(i, j)为左端点,向下 ...

  8. P2216 [HAOI2007]理想的正方形(dp+单调队列优化)

    题目链接:传送门 题目: 题目描述 有一个a*b的整数组成的矩阵,现请你从中找出一个n*n的正方形区域,使得该区域所有数中的最大值和最小值的差最小. 输入输出格式 输入格式: 第一行为3个整数,分别表 ...

  9. 【二维单调队列】BZOJ1047-[HAOI2007]理想的正方形

    [题目大意] 有一个a*b的整数组成的矩阵,现请你从中找出一个n*n的正方形区域,使得该区域所有数中的最大值和最小值的差最小. [思路] 裸的二维单调队列.二维单调队列的思路其实很简单: (1)对于每 ...

随机推荐

  1. 10.JAVA-接口、工厂模式、代理模式、详解

    1.接口定义 接口属于一个特殊的类,这个类里面只能有抽象方法和全局常量  (该概念在JDK1.8之后被打破,在1.8后接口中还可以定义普通方法和静态方法,在后续章节会详讲) 1.1 接口具有以下几个原 ...

  2. AJPFX关于对集合中的元素删除操作和注意点

    import java.util.ArrayList;import java.util.Iterator;import java.util.List; public class ForeTest2 { ...

  3. 洛谷2017 5月月赛R1

    我只想说面对这种难度的题目就是冲着20%的数据暴力... 分数:40+20+36.1+38+0+19 T1 签到题 III 题目背景 pj组选手zzq近日学会了求最大公约数的辗转相除法. 题目描述 类 ...

  4. obj.style 和currentstyle 等区别

    版权声明:本文为博主原创文章,未经博主允许不得转载. 获取样式  obj.style   和currentstyle  等区别   obj.style只能获得内嵌样式(inline Style)就是写 ...

  5. B树、B+树、红黑树、AVL树

    定义及概念 B树 二叉树的深度较大,在查找时会造成I/O读写频繁,查询效率低下,所以引入了多叉树的结构,也就是B树.阶为M的B树具有以下性质: 1.根节点在不为叶子节点的情况下儿子数为 2 ~ M2. ...

  6. How the performance impacts your revenue-性能影响营收

    看完国外一个APM厂商最后的一个业务介绍视频,终于想通了PE领域中最顶层的应用目标,也就是如标题所云.那么这个影响效果是如何做到的?最终的步骤其实很简单,也就是利用大数据进行分析.而自己先前还没有想到 ...

  7. SQL系列学习 基础数据

    //班主任表 CREATE TABLE [dbo].[teacher]( [id] [int] IDENTITY(1,1) NOT NULL primary key, [name] [varchar] ...

  8. Elasticsearch插件清单

    1.API插件:主要对Elasticsearch添加的API特性或者功能,通常用于搜索或者映射 2. 报警插件: 当Elasticsearch的索引指标超过阀值时就会触发 3. 分词插件:ik是比较好 ...

  9. MVC之在实例中的应用

    MVC模式在Java Web应用程序中的实例分析 1. 结合六个基本质量属性 1)可用性 2)可修改性 3)性能 4)安全性 5)可测试性 6)易用性 2. 分析具体功能模块的MVC设计实现(例如登录 ...

  10. how to make a function from using global var to not using it

    let say, we want to find the bottom left node in a tree.one way to do it is using global vars: /** * ...