#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int a,b,n;
int m[1005][1005],q[7][1005][2005];
int head[7][1005],tail[7][1005],l[5][1005],r[3][1005];
int main(){
while(~scanf("%d%d%d",&a,&b,&n)){
int i,j,k;
for(i=1;i<=a;++i){
for(j=1;j<=b;++j){
scanf("%d",&m[i][j]);
}
}
for(i=1;i<=b;++i) {
l[2][i]=r[2][i]=1;
}
memset(head,0,sizeof(head));
memset(tail,0,sizeof(tail));
int ans=~(0u)>>1;
for(i=1;i<=a-n+1;++i){
int row=i;
l[1][i]=r[1][i]=1;
while(r[1][i]<=b){
while(r[1][i]-l[1][i]+1<=n){
int col=r[1][i];
while(r[2][col]-l[2][col]+1<=n){
int t=r[2][col];
while(head[3][col]!=tail[3][col]&&m[q[3][col][tail[3][col]-1]][col]<=m[t][col]) tail[3][col]--;
q[3][col][tail[3][col]++]=t;
while(head[4][col]!=tail[4][col]&&m[q[4][col][tail[4][col]-1]][col]>=m[t][col]) tail[4][col]--;
q[4][col][tail[4][col]++]=t;
r[2][col]++;
}
while(head[1][row]!=tail[1][row]&&head[5][row]!=tail[5][row]&&m[q[5][row][tail[5][row]-1]][q[1][row][tail[1][row]-1]]<=m[q[3][col][head[3][col]]][col])
{ tail[1][row]--,tail[5][row]--;
}
q[1][row][tail[1][row]++]=col,q[5][row][tail[5][row]++]=q[3][col][head[3][col]];
while(head[2][row]!=tail[2][row]&&head[6][row]!=tail[6][row]&&m[q[6][row][tail[6][row]-1]][q[2][row][tail[2][row]-1]]>=m[q[4][col][head[4][col]]][col])
{
tail[2][row]--,tail[6][row]--;
}
q[2][row][tail[2][row]++]=col,q[6][row][tail[6][row]++]=q[4][col][head[4][col]];
l[2][col]++;
while(head[3][col]!=tail[3][col]&&q[3][col][head[3][col]]<l[2][col]) head[3][col]++;
while(head[4][col]!=tail[4][col]&&q[4][col][head[4][col]]<l[2][col]) head[4][col]++;
r[1][i]++;
}
ans=min(ans,m[q[5][row][head[5][row]]][q[1][row][head[1][row]]]-m[q[6][row][head[6][row]]][q[2][row][head[2][row]]]);
l[1][i]++;
while(head[1][row]!=tail[1][row]&&q[1][row][head[1][row]]<l[1][i]) head[1][row]++,head[5][row]++;
while(head[2][row]!=tail[2][row]&&q[2][row][head[2][row]]<l[1][i]) head[2][row]++,head[6][row]++;
}
}
printf("%d\n",ans);
}
return 0;
}

竖着跑一遍单调队列,跑完竖的所有列,再对所有列的最值跑一遍行的

洛谷p2216 多次单调队列,扫描矩阵中的最大值减去最小值最的固定大小子矩阵的更多相关文章

  1. 洛谷P1776--宝物筛选(单调队列+多重背包)

    https://www.luogu.org/problemnew/show/P1776 单调队列+多重背包的讲解https://www.cnblogs.com/JoeFan/p/4165956.htm ...

  2. 洛谷P1886--滑动窗口(单调队列模板)

    https://www.luogu.org/problemnew/show/P1886 单调队列的操作上比普通队列多了可以从尾端出队 单调队列保持队内元素单调递增/递减,以保证队首元素为最小/最大元素 ...

  3. [洛谷P1886]滑动窗口 (单调队列)(线段树)

    ---恢复内容开始--- 这是很好的一道题 题目描述: 现在有一堆数字共N个数字(N<=10^6),以及一个大小为k的窗口. 现在这个从左边开始向右滑动,每次滑动一个单位,求出每次滑动后窗口中的 ...

  4. 【洛谷】【动态规划+单调队列】P1714 切蛋糕

    [题目描述:] 今天是小Z的生日,同学们为他带来了一块蛋糕.这块蛋糕是一个长方体,被用不同色彩分成了N个相同的小块,每小块都有对应的幸运值. 小Z作为寿星,自然希望吃到的第一块蛋糕的幸运值总和最大,但 ...

  5. 【洛谷】【动态规划+单调队列】P1725 琪露诺

    [题目描述:] 在幻想乡,琪露诺是以笨蛋闻名的冰之妖精. 某一天,琪露诺又在玩速冻青蛙,就是用冰把青蛙瞬间冻起来.但是这只青蛙比以往的要聪明许多,在琪露诺来之前就已经跑到了河的对岸.于是琪露诺决定到河 ...

  6. 洛谷 P1886 滑动窗口(单调队列)

    题目链接 https://www.luogu.org/problemnew/show/P1886 题目描述 现在有一堆数字共N个数字(N<=10^6),以及一个大小为k的窗口.现在这个从左边开始 ...

  7. 洛谷luogu3957跳房子(单调队列优化)

    QwQ被普及组的题折磨的死去活来. 硬是卡线段树,没卡过QwQ oi生涯,第一道正经的单调队列dp题 进入正题 题目大意: 其中\(n \le 500000\) 看到这个题的第一感觉就是二分金币数 很 ...

  8. 洛谷 P1714 切蛋糕 单调队列

    这个题比较显然,要用前缀和来做.但只用前缀和是过不去的,会TLE,所以需要进行优化. 对于每个前缀和数组 b 中的元素,都可以找到以 b[i] 结尾的子段最大值 p[i],显然,最终的 ans 就是 ...

  9. 洛谷P2564 生日礼物【单调队列】

    题目背景 四川2009NOI省选 题目描述 小西有一条很长的彩带,彩带上挂着各式各样的彩珠.已知彩珠有N个,分为K种.简单的说,可以将彩带考虑为x轴,每一个彩珠有一个对应的坐标(即位置).某些坐标上可 ...

随机推荐

  1. Hadoop2.7.7阿里云安装部署

    阿里云的网络环境不需要我们配置,如果是在自己电脑上的虚拟机,虚拟机的安装步骤可以百度.这里是单机版的安装(也有集群模式的介绍)使用Xshell连接阿里云主机,用命令将自己下载好的安装包上传到服务器 # ...

  2. Nginx基础环境搭建

    1.下载docker toolbox https://mirrors.aliyun.com/docker-toolbox/windows/docker-toolbox/ 2.选择好安装目录 一路nex ...

  3. NAT模式、路由模式、桥接模式的区别

    NAT模式 NAT模式概述 NAT是"Network Address Translation"的缩写,中文意思是"网络地址转换",它允许一个整体机构以一个公用I ...

  4. 浅析Linux用户空间中的Mmap

    一.MMap基础概念 mmap是一种内存映射文件的方法,即将一个文件或者其它对象映射到进程的地址空间,实现文件磁盘地址和进程虚拟地址空间中一段虚拟地址的一一对映关系.实现这样的映射关系后,进程就可以采 ...

  5. ProbabilityStatistics

    class ProbabilityStatistics: @staticmethoddef simulation_of_probability(v, ratio=10000): assert v &g ...

  6. git database 数据库 平面文件 Git 同其他系统的重要区别 Git 只关心文件数据的整体是否发生变化,而大多数其他系统则只关心文件内容的具体差异 Git 的设计哲学

    小结: 1.如果要浏览项目的历史更新摘要,Git 不用跑到外面的服务器上去取数据回来 2.注意 git clone  应指定版本,它复制的这个版本的全部历史信息: 各个分支  git init 数据库 ...

  7. 安装、登入centos7

    系统CentOS7.4 http://isoredirect.centos.org/centos/7/isos/x86_64/CentOS-7-x86_64-Everything-1708.iso 虚 ...

  8. python基础(int,str,bool,list)

    1数字int. 数字主要是用于计算用的,使用方法并不是很多,就记住一种就可以:      bit_length() #bit_length() 当十进制用二进制表示时,最少使用的位数 v = 11 1 ...

  9. JVM详解总结

    JVM详解总结 1.JVM内存模型 1.1 运行时数据区内存分布实例 1.2 类加载的生命周期 2.物理内存与虚拟内存 3.Java中需要使用内存的组件 3.1 Java堆 3.2 线程 3.3 类和 ...

  10. cachedThreadPool缓存线程池

    package com.loan.modules.common.util; import java.util.concurrent.BlockingQueue; import java.util.co ...