【HAOI 2007】 理想的正方形
【题目链接】
【算法】
单调队列
【代码】
#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】 理想的正方形的更多相关文章
- [HAOI 2007]理想的正方形
Description 有一个a*b的整数组成的矩阵,现请你从中找出一个n*n的正方形区域,使得该区域所有数中的最大值和最小值的差最小. Input 第一行为3个整数,分别表示a,b,n的值第二行至第 ...
- BZOJ1047: [HAOI2007]理想的正方形 [单调队列]
1047: [HAOI2007]理想的正方形 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2857 Solved: 1560[Submit][St ...
- 【bzoj1047】理想的正方形
[bzoj1047]理想的正方形 题意 给定\(a*b\)由整数组成的矩形. 现请你从中找出一个n*n的正方形区域,使得该区域所有数中的最大值和最小值 的差最小. \(1\leq a,b\leq 10 ...
- HAOI2007 理想的正方形
1047: [HAOI2007]理想的正方形 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1402 Solved: 738[Submit][Sta ...
- RAM——[HAOI2007]理想的正方形
题目:[HAOI2007]理想的正方形 描述: [问题描述] 有一个a*b的整数组成的矩阵,现请你从中找出一个n*n的正方形区域,使得该区域所有数中的最大值和最小值的差最小. [输入]: 第一行为3个 ...
- bzoj 1047 : [HAOI2007]理想的正方形 单调队列dp
题目链接 1047: [HAOI2007]理想的正方形 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2369 Solved: 1266[Submi ...
- BZOJ 1047: [HAOI2007]理想的正方形( 单调队列 )
单调队列..先对每一行扫一次维护以每个点(x, y)为结尾的长度为n的最大最小值.然后再对每一列扫一次, 在之前的基础上维护(x, y)为结尾的长度为n的最大最小值. 时间复杂度O(ab) (话说还是 ...
- 【BZOJ1047】[HAOI2007]理想的正方形(单调队列,动态规划)
[BZOJ1047][HAOI2007]理想的正方形(单调队列,动态规划) 题面 BZOJ 洛谷 题解 直接一个单调队列维护一下没给点和它前面的\(n\)个位置的最大值,再用一次单调队列维护连续\(n ...
- bzoj千题计划215:bzoj1047: [HAOI2007]理想的正方形
http://www.lydsy.com/JudgeOnline/problem.php?id=1047 先用单调队列求出每横着n个最大值 再在里面用单调队列求出每竖着n个的最大值 这样一个位置就代表 ...
- 【BZOJ1047】[HAOI2007]理想的正方形
[BZOJ1047][HAOI2007]理想的正方形 题面 bzoj 洛谷 题解 二维\(st\)表,代码是以前的 #include<iostream> #include<cstdi ...
随机推荐
- 树莓派 -- oled 续(2) python
上文中的代码通过wiringPi的API调用devfs API来显示图片. 这里分析的Python代码也通过类似的方法来显示图片. 主要用到了两个Library. import spidev impo ...
- LeetCode 303. Range Sum Query – Immutable
Given an integer array nums, find the sum of the elements between indices i and j (i ≤ j), inclusive ...
- IDEA的Maven Projects无法显示
记一个小坑: 前两天重装了一下电脑系统,下载了个最新的IDEA2018.3.5,把Maven.JDK.TomCat都设置好了 今天打开IDEA创建一个新的Maven项目,项目没有显示让我导入Maven ...
- 04001_HTML简单介绍
1.超文本标记语言 (1)超文本:比普通文本功能更加强大: (2)标记语言:使用一组标签对内容进行描述的一门语言,它不是编程语言! 2.HTML语法和规范 (1)所有的html文件后缀名都是以.htm ...
- 动态规划之最长递增子序列(LIS)
在一个已知的序列{ a1,a2,……am}中,取出若干数组成新的序列{ ai1, ai2,…… aim},其中下标 i1,i2, ……im保持递增,即新数列中的各个数之间依旧保持原数列中 ...
- [luoguP1045] 麦森数(快速幂 + 高精度)
传送门 这道题纯粹是考数学.编程复杂度不大(别看我写了一百多行其实有些是可以不必写的). 计算位数不必用高精时刻存,不然可想而知时间复杂度之大.首先大家要知道一个数学公式 logn(a*b)=logn ...
- js重新讲解继承,es5的一些继承,es6继承的改变 ----------由浅入深
es5 利用原型公有私有继承 function Parent(name) { this.name = name } Parent.prototype.home = '北京'; function Chi ...
- msp430入门学习13
msp430的定时器--Timer_B(定时器B)
- how to read openstack code: Neutron architecture
今天这一章节非常重要.我们知道neutron是一个非常复杂的系统,由很多组件构成.研究这样一个复杂的系统,正确的顺序应该是现在宏观上对其整体结构有所了解,然后再由针对性的对其组件进行深入了解.本章要做 ...
- 排列组合(permutation)系列解题报告
本文解说4道关于permutation的题目: 1. Permutation:输出permutation--基础递归 2. Permutation Sequence: 输出字典序排列的第k个permu ...