题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1047

就是先对行做一遍单调队列,再对那个结果按列做一遍单调队列即可。

代码如下:

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int const maxn=;
int a,b,n,m[maxn][maxn],hmn[maxn][maxn],mn,hmx[maxn][maxn],mx;
int w[maxn],qmn[maxn],qmx[maxn],headn,tailn,headx,tailx,ans;
int main()
{
scanf("%d%d%d",&a,&b,&n);
for(int i=,x;i<=a;i++)
{
headn=;tailn=;headx=;tailx=;//
for(int j=;j<=b;j++)
{
scanf("%d",&w[j]);int x=w[j];
if(j-qmn[headn]>=n)headn++;//位置而非个数
if(j-qmx[headx]>=n)headx++;
while(headn<=tailn&&x<=w[qmn[tailn]])tailn--;
while(headx<=tailx&&x>=w[qmx[tailx]])tailx--;
qmn[++tailn]=j;qmx[++tailx]=j;//
hmn[i][j]=w[qmn[headn]];hmx[i][j]=w[qmx[headx]];
}
}
ans=1e9;
for(int j=;j<=b;j++)
{
headn=;tailn=;headx=;tailx=;
for(int i=;i<=a;i++)
{
int x=hmn[i][j],y=hmx[i][j];
if(i-qmn[headn]>=n)headn++;//
if(i-qmx[headx]>=n)headx++;
while(headn<=tailn&&x<=hmn[qmn[tailn]][j])tailn--;
while(headx<=tailx&&y>=hmx[qmx[tailx]][j])tailx--;
qmn[++tailn]=i;qmx[++tailx]=i;
mn=hmn[qmn[headn]][j];mx=hmx[qmx[headx]][j];
if(i<n||j<n)continue;//||
ans=min(ans,mx-mn);
}
}
printf("%d",ans);
return ;
}

最新文章

  1. 子DIV设置margin-top影响父DIV位置的解决办法
  2. yield生成器及字符串的格式化
  3. Yii 框架学习--02 进阶
  4. css字体家族
  5. [转]Asp.net MVC 利用PartialView 构造自定义菜单
  6. c++ 指针(二)
  7. Using Interface Builder记录
  8. UVa 11536 Smallest Sub-Array (水题, 滑动窗口)
  9. Linux之apt-get无sudo权限安装软件
  10. Python常用模块的安装方法
  11. java打jar包 命令行cmd在当前路径打jar包
  12. [LeetCode] Reshape the Matrix 重塑矩阵
  13. ARM linux常用汇编语法
  14. idea之debug
  15. 纯js Ajax 请求
  16. keepalive高可用
  17. Github的建立及心得体会
  18. Apater适配器模式(结构型模式)
  19. js-ES6学习笔记-Generator函数的应用
  20. opencv图片右转函数

热门文章

  1. 【数学+枚举】OpenJ_POJ - C17J Pairs
  2. 匈牙利游戏(codevs 1269)
  3. PHP错误处理函数set_error_handler()的用法[转载]
  4. 洛谷——P1265 公路修建
  5. hp 88a加粉
  6. JAVA 比较两张图片的相似度的代码
  7. HDU 1588 Gauss Fibonacci(矩阵高速幂+二分等比序列求和)
  8. Linux面试题完整修订附加答案
  9. OpenWRT解决因PPPOE丢包导致频繁掉线问题
  10. coco2d-x怎样创建project