单调队列的基本应用。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define maxn 1050
#define inf 2000000000
using namespace std;
int n,m,a,map[maxn][maxn],m1[maxn][maxn][],m2[maxn][maxn][],q1[maxn],q2[maxn],l1,r1,l2,r2,ans=inf;
void get_m1()
{
for (int i=;i<=n;i++)
{
l1=l2=;r1=r2=;
for (int j=m;j>=;j--)
{
while ((l1<=r1) && (q1[l1]>=j+a)) l1++;
while ((l2<=r2) && (q2[l2]>=j+a)) l2++;
while ((l1<=r1) && (map[i][j]>map[i][q1[r1]])) r1--;
while ((l2<=r2) && (map[i][j]<map[i][q2[r2]])) r2--;
q1[++r1]=j;q2[++r2]=j;
m1[i][j][]=map[i][q1[l1]];m1[i][j][]=map[i][q2[l2]];
}
}
}
void get_m2()
{
for (int i=;i<=m;i++)
{
l1=l2=;r1=r2=;
for (int j=n;j>=;j--)
{
while ((l1<=r1) && (q1[l1]>=j+a)) l1++;
while ((l2<=r2) && (q2[l2]>=j+a)) l2++;
while ((l1<=r1) && (m1[j][i][]>m1[q1[r1]][i][])) r1--;
while ((l2<=r2) && (m1[j][i][]<m1[q2[r2]][i][])) r2--;
q1[++r1]=j;q2[++r2]=j;
m2[j][i][]=m1[q1[l1]][i][];m2[j][i][]=m1[q2[l2]][i][];
}
}
}
int main()
{
scanf("%d%d%d",&n,&m,&a);
for (int i=;i<=n;i++)
for (int j=;j<=m;j++)
scanf("%d",&map[i][j]);
get_m1();
get_m2();
for (int i=;i<=n-a+;i++)
for (int j=;j<=m-a+;j++)
ans=min(ans,m2[i][j][]-m2[i][j][]);
printf("%d\n",ans);
return ;
}

BZOJ 1047 理想的正方形的更多相关文章

  1. BZOJ 1047 理想的正方形(单调队列)

    题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1047 题意:给出一个n*m的矩阵.在所有K*K的子矩阵中,最大最小差值最小的是多少? 思 ...

  2. [BZOJ]1047 理想的正方形(HAOI2007)

    真·水题.小C本来是不想贴出来的,但是有一股来自东方的神秘力量催促小C发出来. Description 有一个a*b的整数组成的矩阵,现请你从中找出一个n*n的正方形区域,使得该区域所有数中的最大值和 ...

  3. [HAOI2007][BZOJ 1047]理想的正方形

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

  4. [BZOJ 1047] [HAOI2007] 理想的正方形 【单调队列】

    题目链接:BZOJ - 1047 题目分析 使用单调队列在 O(n^2) 的时间内求出每个 n * n 正方形的最大值,最小值.然后就可以直接统计答案了. 横向有 a 个单调队列(代码中是 Q[1] ...

  5. bzoj 1047 : [HAOI2007]理想的正方形 单调队列dp

    题目链接 1047: [HAOI2007]理想的正方形 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2369  Solved: 1266[Submi ...

  6. BZOJ 1047: [HAOI2007]理想的正方形( 单调队列 )

    单调队列..先对每一行扫一次维护以每个点(x, y)为结尾的长度为n的最大最小值.然后再对每一列扫一次, 在之前的基础上维护(x, y)为结尾的长度为n的最大最小值. 时间复杂度O(ab) (话说还是 ...

  7. 【BZOJ】【1047】【HAOI2007】理想的正方形

    DP/单调队列优化 一眼看上去就是DP 我想的naive的二维DP是酱紫滴: mx[i][j][k]表示以(i,j)为右下角的k*k的正方形区域内的最大值,mn[i][j][k]同理 mx[i][j] ...

  8. bzoj千题计划215:bzoj1047: [HAOI2007]理想的正方形

    http://www.lydsy.com/JudgeOnline/problem.php?id=1047 先用单调队列求出每横着n个最大值 再在里面用单调队列求出每竖着n个的最大值 这样一个位置就代表 ...

  9. BZOJ1047: [HAOI2007]理想的正方形 [单调队列]

    1047: [HAOI2007]理想的正方形 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2857  Solved: 1560[Submit][St ...

随机推荐

  1. cmd界面的编码如何改为utf8

    在中文Windows系统中,如果一个文本文件是UTF-8编码的,那么在CMD.exe命令行窗口(所谓的DOS窗口)中不能正确显示文件中的内容.在默认情况下,命令行窗口中使用的代码页是中文或者美国的,即 ...

  2. hdu 2473 Junk-Mail Filter (并查集之点的删除)

    Junk-Mail Filter Time Limit: 15000/8000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

  3. linq to xml学习

    http://www.cnblogs.com/greatverve/archive/2010/07/09/linq-to-xml-add-delete-update-query.html 记录一下,别 ...

  4. javascript 数组操作 转

    javascript之数组操作 1.数组的创建 var arrayObj = new Array(); //创建一个数组 var arrayObj = new Array([size]); //创建一 ...

  5. mysql str_to_date字符串转换为日期

    mysql内置函数,在mysql里面利用str_to_date()把字符串转换为日期. 示例:分隔符一致,年月日要一致 select str_to_date('2008-4-2 15:3:28','% ...

  6. "LC.exe" exited with code -1 错误

    当打开一个VS程序时出现"LC.exe" exited with code -1错误,解决方法是: 删除licenses.licx文件即可

  7. 设置正确的post数据格式

    之前一直使用苏飞的HttpHelper类来访问网络,用起来一直感觉很爽.使用其工具直接生成访问代码很是方便.直到昨天下午做到需要使用wpf来post两个字段数据到服务器,服务器使用ASP.NET MV ...

  8. 让DIV实现抖动效果!

    <html> <head> <meta http-equiv="Content-Type" content="text/html; char ...

  9. 用C#用C#实现窗体在规定时间弹出,例如:10:00.弹出后关闭。并在5分钟后再次弹出。5次后停止。最好有具体代码实现窗体在规定时间弹出,例如:10:00.弹出后关闭。并在5分钟后再次弹出。5次后停止。最好有具体代码

    run(){        while(true)        {                show();                if(条件)                {     ...

  10. IOC(控制反转和依赖注入)之Autofac

    Autofac是一款IOC框架,比较于其他的IOC框架,如Spring.NET,Unity,Castle等等所包含的,它很轻量级性能上也是很高的.于是,今天抽空研究了下它.下载地址:http://co ...