调了半天,发现这个写法确实极易错......

对于每列都维护一个单调队列记录最大最小值,这样一次操作后就把最大最小值压到了一维,

然后再对这一行维护一个单调队列,每次更新ans值,然而对于数组和队列下标的访问极易搞错

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<queue>
using namespace std;
const int maxn=;
int n,m,k,ans=0x7fffffff,a[maxn][maxn];
deque<int>ymax[maxn],ymin[maxn],xmax,xmin;
int abs(int a){return a>?a:-a;}
int main()
{
scanf("%d%d%d",&n,&m,&k);
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
scanf("%d",&a[i][j]); for(int i=;i<=n;i++){
for(int j=;j<=m;j++){
while(!ymax[j].empty() && a[ymax[j].back()][j]<a[i][j])ymax[j].pop_back();
while(!ymax[j].empty() && ymax[j].front()+k<=i)ymax[j].pop_front();
ymax[j].push_back(i);
}
for(int j=;j<=m;j++){
while(!ymin[j].empty() && a[ymin[j].back()][j]>a[i][j])ymin[j].pop_back();
while(!ymin[j].empty() && ymin[j].front()+k<=i)ymin[j].pop_front();
ymin[j].push_back(i);
}
if(i<k)continue;//还不能成为正方形就先跳过
//此时已压成一行,滑动窗口即可
xmin.clear();xmax.clear();//不能忘了初始化
for(int j=;j<=m;j++){
while(!xmax.empty() && a[ymax[xmax.back()].front()][xmax.back()]<a[ymax[j].front()][j])xmax.pop_back();
while(!xmax.empty() && xmax.front()+k<=j)xmax.pop_front();
xmax.push_back(j);
while(!xmin.empty() && a[ymin[xmin.back()].front()][xmin.back()]>a[ymin[j].front()][j])xmin.pop_back();
while(!xmin.empty() && xmin.front()+k<=j)xmin.pop_front();
xmin.push_back(j);
if(j<k)continue;
ans=min(ans,abs(a[ymin[xmin.front()].front()][xmin.front()]-a[ymax[xmax.front()].front()][xmax.front()]));
}
}
printf("%d\n",ans);
}

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

  1. 一码学程 10284 排队找bug 题解 单调队列 或者 线段树RMQ

    注:只是看到题目,未评测,所以不确定代码正确性,但是算法思路没有问题 描述 同学们的bug还真是多啊,orz... 春节期间大家存下的bug都来找肖老师解决了. 每个人都有bug,但是肖老师却只有一个 ...

  2. [Luogu 2216] [HAOI2007]理想的正方形

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

  3. HDU 5749 Colmerauer 单调队列+暴力贡献

    BestCoder Round #84   1003 分析:(先奉上zimpha巨官方题解) 感悟:看到题解单调队列,秒懂如何处理每个点的范围,但是题解的一句算贡献让我纠结半天 已知一个点的up,do ...

  4. 【POJ 2823】Sliding Window(单调队列/堆)

    BUPT2017 wintertraining(16) #5 D POJ - 2823 题意 给定n,k,求滑窗[i,i+k-1]在(1<=i<=n)的最大值最小值. 题解 单调队列或堆. ...

  5. 【bzoj3831】[Poi2014]Little Bird 单调队列优化dp

    原文地址:http://www.cnblogs.com/GXZlegend/p/6826475.html 题目描述 In the Byteotian Line Forest there are   t ...

  6. [luogu]P3572 [POI2014]PTA-Little Bird(单调队列)

    P3572 [POI2014]PTA-Little Bird 题目描述 In the Byteotian Line Forest there are nn trees in a row. On top ...

  7. 【DP】【单调队列】洛谷 P2216 [HAOI2007]理想的正方形 题解

        算是单调队列的复习吧,不是很难 题目描述 有一个$a\times b$的整数组成的矩阵,现请你从中找出一个$n\times n$的正方形区域,使得该区域所有数中的最大值和最小值的差最小. 输入 ...

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

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

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

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

随机推荐

  1. 2U网络机箱的尺寸是多少,4U网络机箱的尺寸是多少

    厚度以4.445cm为基本单位.1U就是4.445cm,2U则是1U的2倍为8.89cm.48.26cm=19英寸,如果是标准的机架式设备,宽应该是满足这个标准的.纵深的话 有600mm或者800mm ...

  2. js正则表达式,密码长度要大于6位,由数字和字母组成

    var pwd = $("#pwd").val(); var reg = /^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6,}$/; if(!reg ...

  3. web安全字体

    webfont解剖 Unicode字体可以包含数以千计字形 有四个字体格式: WOFF2, WOFF, EOT, TTF 一些字体格式需要使用GZIP压缩 一个web字体是字形的集合,且每个字形是一个 ...

  4. 随滚动条滚动,动态修改元素class

    页面某块内容当页面滚动时,固定在浏览器的一个位置 其实就是改变了便签的class,修改了css属性设置position: fixed:fixed属性可以让便签固定在浏览器某一位置(记得引用jquery ...

  5. hpuoj 1193: Interval

    Interval [STL.双指针.二分] 题目链接 http://acm.hpu.edu.cn/problem.php?id=1193 或者 题目链接 http://acm.nyist.net/Ju ...

  6. Messes in Reading Source Coding of SSD

    这里记录在学习SSD源码过程中用到的相关内容 keras.applications.imagenet_utils.preprocess_input(): 用来将读入的原始图片张量转换成为需要Image ...

  7. <十四>UML核心视图静态视图之类图和包图

    一:类图(行为类和实体类) --->类图用于展示系统中的类及其相互之间的关系 --->概念层类图 --->说明层类图   二:概念层类图 --->概念层的观点认为:在这个层次的 ...

  8. 算法实现c语言--02

    从键盘上输入字符,将小写字母转换成大写字母.输入“ctl + z” 结束 . #include<stdio.h> #include<stdlib.h> //从键盘上输入字符,将 ...

  9. 3.javascript转换日期字符串为Date对象

    js中文网 阮一峰 1.求format“xxxx年xx月xx日 xx:xx”类型的两个日期天数差 var start = "2017年09月17日 13:51"; var end ...

  10. Run-Time Check Failure #3 - The variable 'p' is being used without being initialized.

    Run-Time Check Failure #3 - The variable 'p' is being used without being initialized. 运行时检查失败 变量p没有初 ...