http://www.lydsy.com/JudgeOnline/problem.php?id=1047

https://www.luogu.org/problemnew/show/P2216#sub

有一个a*b的整数组成的矩阵,现请你从中找出一个n*n的正方形区域,使得该区域所有数中的最大值和最小值的差最小。

参考:http://blog.csdn.net/ziqian2000/article/details/52089693

单调队列好题,充分体现了我有多菜。

先维护每列长度为n的最大值/最小值,显然可以单调队列维护出来。

然后利用上面的数据再单调队列重新维护一遍就可以得到答案了。

#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<vector>
using namespace std;
const int N=1e3+;
inline int read(){
int X=,w=;char ch=;
while(ch<''||ch>''){w|=ch=='-';ch=getchar();}
while(ch>=''&&ch<='')X=(X<<)+(X<<)+(ch^),ch=getchar();
return w?-X:X;
}
int a,b,n,g[N][N],t[N][N];
int re[][N][N],q[N][];
void solve(int k){
for(int i=;i<=a;i++){
int l=,r=;
for(int j=;j<=b;j++){
while(l<r&&j-q[l][]>=n)l++;
if(!k)while(l<r&&t[i][j]>=q[r-][])r--;
else while(l<r&&t[i][j]<=q[r-][])r--;
q[r][]=t[i][j];q[r++][]=j;
g[i][j]=q[l][];
}
}
for(int j=n;j<=b;j++){
int l=,r=;
for(int i=;i<=a;i++){
while(l<r&&i-q[l][]>=n)l++;
if(!k)while(l<r&&g[i][j]>=q[r-][])r--;
else while(l<r&&g[i][j]<=q[r-][])r--;
q[r][]=g[i][j];q[r++][]=i;
re[k][i][j]=q[l][];
}
}
}
int main(){
a=read(),b=read(),n=read();
for(int i=;i<=a;i++){
for(int j=;j<=b;j++){
t[i][j]=read();
}
}
solve();solve();
int ans=1e9;
for(int i=n;i<=a;i++){
for(int j=n;j<=b;j++){
ans=min(ans,re[][i][j]-re[][i][j]);
}
}
printf("%d\n",ans);
return ;
}

+++++++++++++++++++++++++++++++++++++++++++

+本文作者:luyouqi233。               +

+欢迎访问我的博客:http://www.cnblogs.com/luyouqi233/+

+++++++++++++++++++++++++++++++++++++++++++

最新文章

  1. ASP.Net中通过Jquery前端对Repeater控件绑定的数据进行操作
  2. BZOJ3421 : Poi2013 Walk
  3. 第四篇 Integration Services:增量加载-Updating Rows
  4. C++类实现三维数组算法
  5. 使用 Feedly RSS阅读器订阅技术大牛的博客
  6. 根据SVN的MESSAGE进行多版本输出,反向排序,真是曲折~~~啊
  7. NSString 的常见方法
  8. 《JavaScript高级程序设计》读书笔记 ---变量、作用域和内存问题小结
  9. Oracle_字段数据类型
  10. 26 python 初学(线程、同步锁、死锁和递归锁)
  11. Linux学习历程——Centos 7 ps命令基础
  12. JSOUP 超时分析与处理
  13. 《全栈性能Jmeter》-5JMeter负载与监听
  14. Linux命令_搜索文件
  15. 解题:SCOI 2005 骑士精神
  16. 通过ExchangeService 发送邮件
  17. 枚举子集&amp;高位前缀和
  18. Python科学计算库灬numpy
  19. 虚拟机中安装 centOS,本地安装 SSH 连接 - 01
  20. Grafana学习

热门文章

  1. WSL跑linux服务程序
  2. hdu1869六度分离(floyd)
  3. DirectX11与DirectX12在古墓丽影暗影中的表现
  4. Java开发工程师(Web方向) - 02.Servlet技术 - 第4章.JSP
  5. Java应用基础微专业-工程篇
  6. 只写Python一遍代码,就可以同时生成安卓及IOS的APP,真优秀
  7. PNG和PVR之间互相转换的脚本
  8. 1.安装CDH5.12.x
  9. 总结python 元组和列表的区别
  10. 用URL传参带特殊字符,特殊字符丢失