题目链接


Solution

MD,经过这道题,算是掌握单调队列了...

可以先预处理出点 \((i,j)\) 往上 \(n\) 的最大值和最小值.

然后再横着做一遍单调队列即可.

Code

#include<bits/stdc++.h>
#define in(x) x=read();
#define ll long long
#define N 1001
using namespace std; ll read()
{
char ch=getchar(); ll f=1,w=0;
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){w=w*10+ch-'0';ch=getchar();}
return f*w;
} ll Mx[N][N],Mn[N][N];
ll a,n,m,w[N][N];
ll ans=0x3f3f3f3f3f; int main()
{
in(n); in(m); in(a);
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
in(w[i][j]); for(int j=1;j<=m;j++)
{
int head=1,tail=0,q[N];
for(int i=1;i<=n;i++)
{
while(head<=tail&&w[q[tail]][j]>=w[i][j]) tail--;
q[++tail]=i;
while(q[tail]-q[head]>=a) head++;
Mn[j][i]=w[q[head]][j];
}
head=1;tail=0;
for(int i=1;i<=n;i++)
{
while(head<=tail&&w[q[tail]][j]<=w[i][j]) tail--;
q[++tail]=i;
while(q[tail]-q[head]>=a) head++;
Mx[j][i]=w[q[head]][j];
}
}
for(int i=a;i<=n;i++)
{
int h=1,t=0,H=1,T=0;
ll minn,maxx,q1[N],q2[N];
for(int j=1;j<=m;j++)
{
while(h<=t&&Mn[q1[t]][i]>=Mn[j][i]) t--;
while(H<=T&&Mx[q2[T]][i]<=Mx[j][i]) T--;
q1[++t]=j;q2[++T]=j;
while(q1[t]-q1[h]>=a) h++;
while(q2[T]-q2[H]>=a) H++;
minn=Mn[q1[h]][i];
maxx=Mx[q2[H]][i];
if(j>=a)
ans=min(ans,maxx-minn);
}
}
cout<<ans;
}

[HAOI2007] 理想的正方形 (单调队列)的更多相关文章

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

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

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

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

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

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

  4. P2216 [HAOI2007]理想的正方形 (单调队列)

    题目链接:P2216 [HAOI2007]理想的正方形 题目描述 有一个 \(a\times b\)的整数组成的矩阵,现请你从中找出一个 \(n\times n\)的正方形区域,使得该区域所有数中的最 ...

  5. Luogu 2216[HAOI2007]理想的正方形 - 单调队列

    Solution 二维单调队列, 这个数组套起来看得我眼瞎... Code #include<cstdio> #include<algorithm> #include<c ...

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

    题意很简明吧? 枚举的矩形下边界和右端点即右下角,来确定矩形位置: 每一个纵列开一个单调队列,记录从 i-n+1 行到 i 行每列的最大值和最小值,矩形下边界向下推移的时候维护一下: 然后在记录的每一 ...

  7. 洛谷P2216: [HAOI2007]理想的正方形 单调队列优化DP

    洛谷P2216 )逼着自己写DP 题意: 给定一个带有数字的矩阵,找出一个大小为n*n的矩阵,这个矩阵中最大值减最小值最小. 思路: 先处理出每一行每个格子到前面n个格子中的最大值和最小值.然后对每一 ...

  8. [HAOI2007]理想的正方形 单调队列 暴力

    Code: #include<cstdio> #include<queue> #include<algorithm> using namespace std; #d ...

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

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

随机推荐

  1. CentOS更改时区

    1.编辑文件 vi /etc/sysconfig/clock 修改内容 ZONE="Asia/Shanghai" 2.覆盖旧时区文件 cp /usr/share/zoneinfo/ ...

  2. CPP-基础:c++读取ini文件

    配置文件格式是[JP]K=2EC156673E 2F4240 5595F6 char str[50];GetPrivateProfileString("JP", "K&q ...

  3. 《队长说得队》【Alpha】Scrum meeting 4

    项目 内容 这个作业属于哪个课程 >>2016级计算机科学与工程学院软件工程(西北师范大学) 这个作业的要求在哪里 >>实验十二 团队作业8:软件测试与ALPHA冲刺 团队名称 ...

  4. VS code 豆沙绿护眼主题

    一.下载亮色主题Atom One Light 二.找到settings.JSON,粘贴JSON 快捷键输入  Ctrl+Shift+p   ,输入settings,选择open settings (J ...

  5. FMDB中的数据处理

    [self.db executeUpdate:@"create table test (a text, b text, c integer, d double, e double)" ...

  6. linux文件属性描述(inode,block)

    1.ls   -lhi 文字解释: 第一列:inode索引节点编号(人的身份证,全国唯一) 系统读取文件时首先通过文件名找到inode,然后才能读取到文件内容. 第二列:文件类型及权限(共10个字符, ...

  7. destoon 多表联合查询时出现解析错误,parse_str函数解析错误

    数据库前缀  wb_ 标签 ,调用文章时获取评论数量 <!--{php $tags=tag("table=article_24 a left join wb_comment_stat ...

  8. json_encode() 避免转换中文

    json_encode() 避免转换中文 我们都知道,json_encode()可以将数据转换为json格式,而且只针对utf8编码的数据有效,而且在转换中文的时候,将中文转换成不可读的”\u***” ...

  9. python3爬取墨迹天气并发送给微信好友,附源码

    需求: 1. 爬取墨迹天气的信息,包括温湿度.风速.紫外线.限号情况,生活tips等信息 2. 输入需要查询的城市,自动爬取相应信息 3. 链接微信,发送给指定好友 思路比较清晰,主要分两块,一是爬虫 ...

  10. eclipse使用技巧的网站收集——转载(三)

    本文来自:https://www.cnblogs.com/jeffen/p/5965227.html,未经更改,尊重作者 工欲善其事,必先利其器.对于程序员来说,Eclipse便是其中的一个“器”.本 ...