调了半天,发现这个写法确实极易错......

对于每列都维护一个单调队列记录最大最小值,这样一次操作后就把最大最小值压到了一维,

然后再对这一行维护一个单调队列,每次更新ans值,然而对于数组和队列下标的访问极易搞错

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<queue>
using namespace std;
const int maxn=;
int n,m,k,ans=0x7fffffff,a[maxn][maxn];
deque<int>ymax[maxn],ymin[maxn],xmax,xmin;
int abs(int a){return a>?a:-a;}
int main()
{
scanf("%d%d%d",&n,&m,&k);
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
scanf("%d",&a[i][j]); for(int i=;i<=n;i++){
for(int j=;j<=m;j++){
while(!ymax[j].empty() && a[ymax[j].back()][j]<a[i][j])ymax[j].pop_back();
while(!ymax[j].empty() && ymax[j].front()+k<=i)ymax[j].pop_front();
ymax[j].push_back(i);
}
for(int j=;j<=m;j++){
while(!ymin[j].empty() && a[ymin[j].back()][j]>a[i][j])ymin[j].pop_back();
while(!ymin[j].empty() && ymin[j].front()+k<=i)ymin[j].pop_front();
ymin[j].push_back(i);
}
if(i<k)continue;//还不能成为正方形就先跳过
//此时已压成一行,滑动窗口即可
xmin.clear();xmax.clear();//不能忘了初始化
for(int j=;j<=m;j++){
while(!xmax.empty() && a[ymax[xmax.back()].front()][xmax.back()]<a[ymax[j].front()][j])xmax.pop_back();
while(!xmax.empty() && xmax.front()+k<=j)xmax.pop_front();
xmax.push_back(j);
while(!xmin.empty() && a[ymin[xmin.back()].front()][xmin.back()]>a[ymin[j].front()][j])xmin.pop_back();
while(!xmin.empty() && xmin.front()+k<=j)xmin.pop_front();
xmin.push_back(j);
if(j<k)continue;
ans=min(ans,abs(a[ymin[xmin.front()].front()][xmin.front()]-a[ymax[xmax.front()].front()][xmax.front()]));
}
}
printf("%d\n",ans);
}

最新文章

  1. 解决python编码格式错误问题
  2. Java环境变量
  3. avalon源码分析(转)
  4. Jquery遍历选中的input标签
  5. [bzoj1787][Ahoi2008]紧急集合
  6. .Net下实现可扩展的编程方法简述
  7. 一道JAVA经典面试题目的两种解法
  8. 记录asp.net网站停止运行原因的代码
  9. Block之变量作用域
  10. uva 10626 - Buying Coke(记忆化搜索)
  11. django post方法不能提交
  12. jsp页面中格式化为小数点两位
  13. perl post发送json数据
  14. VC创建多级目录
  15. saiku环境搭建
  16. (5)HomeAssistant mqtt-433-esp8266-arduino-传感器
  17. cmake与autoconf+automake
  18. 初学c# -- 开始学directx
  19. PTA (Advanced Level) 1009 Product of Polynomials
  20. 84.VMware Tools安装——设置共享文件

热门文章

  1. Flask内置命令行工具—CLI
  2. 如何配置DSI时钟频率
  3. HDU1873 看病要排队 —— 优先队列(STL)
  4. 转回java,项目遇到的环境相关问题记录
  5. linux下mysql开启二进制日志
  6. BZOJ 2023 [Usaco2005 Nov]Ant Counting 数蚂蚁:dp【前缀和优化】
  7. 详解linux中install命令和cp命令的区别
  8. 【CQ18高一暑假前挑战赛3.5】标程
  9. HihoCoder1576 子树中的最小权值( dfs序 +线段树 || 树剖)
  10. python 复制文件流程