【题目链接】

点击打开链接

【算法】

单调队列

【代码】

#include<bits/stdc++.h>
using namespace std;
#define MAXN 1010
const int INF = 2e9; int i,j,a,b,n,ans = INF;
deque<int> q1,q2;
int val[MAXN][MAXN],mx[MAXN][MAXN],mn[MAXN][MAXN]; template <typename T> inline void read(T &x)
{
int f = ; x = ;
char c = getchar();
for (; !isdigit(c); c = getchar()) { if (c == '-') f = -f; }
for (; isdigit(c); c = getchar()) x = (x << ) + (x << ) + c - '';
x *= f;
}
template <typename T> inline void write(T x)
{
if (x < )
{
putchar('-');
x = -x;
}
if (x > ) write(x/);
putchar(x%+'');
}
template <typename T> inline void writeln(T x)
{
write(x);
puts("");
} int main() { read(a); read(b); read(n);
for (i = ; i <= a; i++)
{
for (j = ; j <= b; j++)
{
read(val[i][j]);
}
}
for (i = ; i <= b; i++)
{
q1.clear(); q2.clear();
for (j = ; j < n; j++)
{
while ((!q1.empty()) && (val[q1.back()][i] <= val[j][i])) q1.pop_back();
q1.push_back(j);
while ((!q2.empty()) && (val[q2.back()][i] >= val[j][i])) q2.pop_back();
q2.push_back(j);
}
for (j = n; j <= a; j++)
{
while ((!q1.empty()) && (j - q1.front() >= n)) q1.pop_front();
while ((!q2.empty()) && (j - q2.front() >= n)) q2.pop_front();
while ((!q1.empty()) && (val[q1.back()][i] <= val[j][i])) q1.pop_back();
q1.push_back(j);
while ((!q2.empty()) && (val[q2.back()][i] >= val[j][i])) q2.pop_back();
q2.push_back(j);
mx[j][i] = val[q1.front()][i];
mn[j][i] = val[q2.front()][i];
}
}
for (i = n; i <= a; i++)
{
q1.clear(); q2.clear();
for (j = ; j < n; j++)
{
while ((!q1.empty()) && (mx[i][q1.back()] <= mx[i][j])) q1.pop_back();
q1.push_back(j);
while ((!q2.empty()) && (mn[i][q2.back()] >= mn[i][j])) q2.pop_back();
q2.push_back(j);
}
for (j = n; j <= b; j++)
{
while ((!q1.empty()) && (j - q1.front() >= n)) q1.pop_front();
while ((!q2.empty()) && (j - q2.front() >= n)) q2.pop_front();
while ((!q1.empty()) && (mx[i][q1.back()] <= mx[i][j])) q1.pop_back();
q1.push_back(j);
while ((!q2.empty()) && (mn[i][q2.back()] >= mn[i][j])) q2.pop_back();
q2.push_back(j);
ans = min(ans,mx[i][q1.front()]-mn[i][q2.front()]);
}
}
writeln(ans); return ; }

【HAOI 2007】 理想的正方形的更多相关文章

  1. [HAOI 2007]理想的正方形

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

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

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

  3. 【bzoj1047】理想的正方形

    [bzoj1047]理想的正方形 题意 给定\(a*b\)由整数组成的矩形. 现请你从中找出一个n*n的正方形区域,使得该区域所有数中的最大值和最小值 的差最小. \(1\leq a,b\leq 10 ...

  4. HAOI2007 理想的正方形

    1047: [HAOI2007]理想的正方形 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1402  Solved: 738[Submit][Sta ...

  5. RAM——[HAOI2007]理想的正方形

    题目:[HAOI2007]理想的正方形 描述: [问题描述] 有一个a*b的整数组成的矩阵,现请你从中找出一个n*n的正方形区域,使得该区域所有数中的最大值和最小值的差最小. [输入]: 第一行为3个 ...

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

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

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

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

  8. 【BZOJ1047】[HAOI2007]理想的正方形(单调队列,动态规划)

    [BZOJ1047][HAOI2007]理想的正方形(单调队列,动态规划) 题面 BZOJ 洛谷 题解 直接一个单调队列维护一下没给点和它前面的\(n\)个位置的最大值,再用一次单调队列维护连续\(n ...

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

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

  10. 【BZOJ1047】[HAOI2007]理想的正方形

    [BZOJ1047][HAOI2007]理想的正方形 题面 bzoj 洛谷 题解 二维\(st\)表,代码是以前的 #include<iostream> #include<cstdi ...

随机推荐

  1. Samba 学习笔记

    这个网站不错.https://www.ibm.com/developerworks/cn/linux/l-lpic3-311-1/

  2. 黑马毕向东Java基础知识总结

    Java基础知识总结(超级经典) 转自:百度文库 黑马毕向东JAVA基础总结笔记    侵删! 写代码: 1,明确需求.我要做什么? 2,分析思路.我要怎么做?1,2,3. 3,确定步骤.每一个思路部 ...

  3. Django的forms包部分重要用法:

    from django.forms import fields from django.forms import Form from django.forms import widgets 在view ...

  4. MT4系统自带指标代码

    MT4系统自带指标代码 ~ Accelerator Oscillator 震荡加速指标:                   double iAC() ~ Accumulation/Distribut ...

  5. 81-Gator Oscillator,加多摆动指标.(2015.7.1)

    Gator Oscillator 加多摆动指标 Oscillator,加多摆动指标.(2015.7.1)" title="81-Gator Oscillator,加多摆动指标.(2 ...

  6. Android BGABadgeView:BGABadgeLinearLayout以整体线性布局作为BadgeView(3)

     Android BGABadgeView:BGABadgeLinearLayout以整体线性布局作为BadgeView(3) Android BGABadgeView不仅可以把某个View作为B ...

  7. 前端开发:JQuery(1)

    JQuery DOM文档加载的步骤: 1. 解析HTML结构: 2. 加载外部脚本和样式: 3. 解析并执行脚本代码: 4. DOM树构建完成: 5. 加载图片等外部文件: 6. 页面加载完成: JS ...

  8. Ubuntu 12.04 之 虚拟主机的配置

    Ubuntu 12.04 之 虚拟主机的配置 (1)打开etc/hosts文件 增加: 127.0.0.1 study.ubuntu.com 127.0.0.1 hello.ubuntu.com 12 ...

  9. JavaScript为字符串添加样式

    <script type="text/javascript"> var txt="Hello World!" document.write(&quo ...

  10. 深入理解windows系统内的GMT和时区

    http://www.itshanghai.net/technology/wdzl_windowsxp/   UTC(Universal Time Coordinated)是通用协调时,这两者几乎是一 ...