单调队列的基本应用。

#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. 在VBA中调用工作表函数

    虽然VBA几乎可以完成所有工作表函数的功能,但是有时候在无法打开思路的时候,适当调用一些工作表函数也未尝不可,在VBA中调用工作表函数需要用到 WorksheetFunction对象,例如: Work ...

  2. hdu----(4308)Saving Princess claire_(搜索)

    Saving Princess claire_ Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/ ...

  3. ARM堆栈及特殊指令

    ARM7支持四种堆栈模式:满递减(FD).满递增(FA).空递减(ED).空递增(EA) FD:堆栈地址从上往下递减,且指针指向最后一个入栈元素.FA:堆栈地址从下往上递增,且指针指向最后一个入栈元素 ...

  4. Android之ScrollView嵌套ListView

    在ScrollView中嵌套使用ListView,ListView只会显示的内容只有一行多一点 解决方案: public class Utility { public void setListView ...

  5. JDE910笔记2--OMW项目建立及简单使用

    1.打开JDE的OBJECT MANAGEMENT WORKBENCH.在工作区中选择ADD,建立项目并选择OMW PROJECT,添加相关信息,如下图所示 其中,ProjectID可以对应不同的数据 ...

  6. [转]Java8-本地缓存

    这里我将会给大家演示用ConcurrentHashMap类和lambda表达式实现一个本地缓存.因为Map有一个新的方法可以在key为Null的时候自动计算一个新的value值.非常完美的实现cach ...

  7. BZOJ4000 [TJOI2015]棋盘

    首先是状态压缩DP... 然后我们发现转移都是一样的...可以矩阵优化... 于是做完啦QAQQQ 题目读不懂?恩多读几遍就读懂了,诶诶诶!别打我呀! /*********************** ...

  8. BZOJ3996 [TJOI2015]线性代数

    就是求$D = A \times B \times A^T - C \times A^T$ 展开也就是$$D = \sum_{i, j} A_i * A_j * B_{i, j} - \sum_{i} ...

  9. 使用MediaPlayer播放音频-----之二

    MediaPlayer播放不同来源的音频文件: 一.播放应用的资源文件 1.调用MediaPlayer的create(Context  context , int  resid)方法加载指定资源文件. ...

  10. ASP.NET MVC 输出字符串

    @{Output.Write("<h1>输出字符串</h1>");}