浅谈队列:https://www.cnblogs.com/AKMer/p/10314965.html

题目传送门:https://lydsy.com/JudgeOnline/problem.php?id=1047

对于每一行用单调不增和单调不减队列分别维护最小值和最大值。

对于列,也用单调不增和单调不减队列分别维护最小值和最大值。

步骤如下:

\(1\)、每一行分别把前\(n\)个数的单调队列建好。

\(2\)、取出每一行队头的元素用列的单调队列维护并更新答案。

\(3\)、把每一行在\([2,n+1]\)的元素用单调队列维护好,依次类推,直到\([b-n+1,b]\)的答案被统计完。

时间复杂度:\(O(ab)\)

空间复杂度:\(O(ab)\)

代码如下:

#include <cstdio>
#include <algorithm>
using namespace std; const int maxn=1005; int list1[maxn],list2[maxn];
int a,b,n,head1,tail1,head2,tail2,ans=2e9; int read() {
int x=0,f=1;char ch=getchar();
for(;ch<'0'||ch>'9';ch=getchar())if(ch=='-')f=-1;
for(;ch>='0'&&ch<='9';ch=getchar())x=x*10+ch-'0';
return x*f;
} struct Queue_mn {
int head,tail;
int list[maxn],a[maxn]; void ins(int id) {
while(head!=tail&&a[list[tail-1]]>a[id])tail--;
while(head!=tail&&id-list[head]>=n)head++;list[tail++]=id;
} int front() {
return a[list[head]];
}
}Mn[maxn]; struct Queue_mx {
int head,tail;
int list[maxn],a[maxn]; void ins(int id) {
while(head!=tail&&a[list[tail-1]]<a[id])tail--;
while(head!=tail&&id-list[head]>=n)head++;list[tail++]=id;
} int front() {
return a[list[head]];
}
}Mx[maxn]; int main() {
a=read(),b=read(),n=read();
for(int i=1;i<=a;i++)
for(int j=1;j<=b;j++)
Mn[i].a[j]=Mx[i].a[j]=read();
for(int i=1;i<=a;i++)
for(int j=1;j<n;j++)
Mn[i].ins(j),Mx[i].ins(j);
for(int i=n;i<=b;i++) {
for(int j=1;j<=a;j++)
Mn[j].ins(i),Mx[j].ins(i);
head1=tail1=head2=tail2=0;
for(int j=1;j<=a;j++) {
int mn=Mn[j].front(),mx=Mx[j].front();
while(head1!=tail1&&Mn[list1[tail1-1]].front()>mn)tail1--;
while(head1!=tail1&&j-list1[head1]>=n)head1++;list1[tail1++]=j;
while(head2!=tail2&&Mx[list2[tail2-1]].front()<mx)tail2--;
while(head2!=tail2&&j-list2[head2]>=n)head2++;list2[tail2++]=j;
if(j>=n)ans=min(ans,Mx[list2[head2]].front()-Mn[list1[head1]].front());
}
}
printf("%d\n",ans);
return 0;
}

BZOJ1047:[HAOI2007]理想的正方形的更多相关文章

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

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

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

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

  3. [bzoj1047][HAOI2007]理想的正方形_动态规划_单调队列

    理想的正方形 bzoj-1047 HAOI-2007 题目大意:有一个a*b的整数组成的矩阵,现请你从中找出一个n*n的正方形区域,使得该区域所有数中的最大值和最小值的差最小. 注释:$2\le a, ...

  4. BZOJ1047[HAOI2007]理想的正方形——二维ST表

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

  5. BZOJ1047: [HAOI2007]理想的正方形

    传送门 蛤省省选果然水啊,我这种蒟蒻都能一遍A. 横向纵向维护两个单调队列,做两次求最大和最小的,总复杂度$O(NM)$ 码农题,考察代码实现能力 //BZOJ 1047 //by Cydiater ...

  6. [BZOJ1047][HAOI2007]理想的正方形(RMQ+DP)

    题意 有一个a*b的整数组成的矩阵,现请你从中找出一个n*n的正方形区域,使得该区域所有数中的最大值和最小值的差最小. 思路 RMQ求 再DP 代码 #include<cstdio> #i ...

  7. 【单调队列】bzoj1047 [HAOI2007]理想的正方形

    先把整个矩阵处理成b[n][m-K+1].c[n][m-K+1]大小的两个矩阵,分别存储每行每K个数中的最大.最小值,然后再通过b.c处理出d.e分别表示K*K大小的子矩阵中的最大.最小值即可.单调队 ...

  8. [BZOJ1047][HAOI2007]理想的正方形 二维单调队列

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1047 我们对每矩阵的一列维护一个大小为$n$的单调队列,队中元素为矩阵中元素.然后扫描每一 ...

  9. bzoj1047 [HAOI2007]理想的正方形——二维单调队列

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1047 就是先对行做一遍单调队列,再对那个结果按列做一遍单调队列即可. 代码如下: #incl ...

  10. [Bzoj1047][HAOI2007]理想的正方形(ST表)

    题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1047 题目虽然有一个n的限制,但求二维区间最值首先想到的还是RMQ,但是如果按照往常RM ...

随机推荐

  1. JFreeChart应用实例-折线图

    http://www.tuicool.com/articles/Nr2Yna JFreeChart在制作折线图的时候可以使用两种不同的方式 package Line; import java.awt. ...

  2. Linux Graphic DRI Wayland 显示子系统

    转:https://blog.csdn.net/u013165704/article/details/80709547 1. 前言 上篇文章(Linux graphic subsytem(1)_概述) ...

  3. Django-Ajax进阶

    一.Ajax上传文件 1.form表单上传文件 文件和其他的数据类型不一样,是一个二进制的形式 Form上传文件的时候切记要加上:enctype="multipart/form-data&q ...

  4. [算法]在单链表和双链表中删除倒数第k个结点

    题目: 分别实现两个函数,一个可以删除单链表中倒数第K个节点,另一个可以删除双链表中倒数第K个节点. 要求: 如果链表长度为N,时间复杂度达到O(N),额外空间复杂度达到O(1). 解答: 让链表从头 ...

  5. BZOJ-1396: 识别子串

    后缀自动机+线段树 先建出\(sam\),统计一遍每个点的\(right\)集合大小\(siz\),对于\(siz=1\)的点\(x\),他所代表的子串只会出现一次,设\(y=fa[x]\),则这个点 ...

  6. Windows 7安装PHP运行环境和开发环境

    1. 安装Apache 下载地址:http://www.apache.org/dyn/closer.cgi/httpd/binaries/win32 如需更改端口:打开Apache安装目录下conf目 ...

  7. CentOS 7 安装 maven

    下载地址 http://maven.apache.org/download.cgi 版本 apache-maven-3.3.9 -bin.tar.gz tar -xvf apache-maven-3. ...

  8. Hadoop心跳机制源码分析

    正文: 一.体系背景 首先和大家说明一下:hadoop的心跳机制的底层是通过RPC机制实现的,这篇文章我只介绍心跳实现的代码,对于底层的具体实现,大家可以参考我的另几篇博客: 1. hadoop的RP ...

  9. vim 乱码问题的方法参考

    linux 中设置当前用户的系统默认编码为 UTF-8 格式解决 vim 乱码问题的方法参考  任侠  2013-05-02 11:58  电脑基础  抢沙发  13,732 views  在使用 l ...

  10. 0.00-050613_ZC_Chapter4_20151230

    1. 32位 保护模式 段选择符 --> 段描述符(段描述符表) --> 段基地址 + 偏移量  ==> 线性地址(ZC: 这个地址就是段的开始地址) 1.2. 段限长字段LIMIT ...