[题解](单调队列)luogu_P2216_BZOJ_1047 理想的正方形
调了半天,发现这个写法确实极易错......
对于每列都维护一个单调队列记录最大最小值,这样一次操作后就把最大最小值压到了一维,
然后再对这一行维护一个单调队列,每次更新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 理想的正方形的更多相关文章
- 一码学程 10284 排队找bug 题解 单调队列 或者 线段树RMQ
注:只是看到题目,未评测,所以不确定代码正确性,但是算法思路没有问题 描述 同学们的bug还真是多啊,orz... 春节期间大家存下的bug都来找肖老师解决了. 每个人都有bug,但是肖老师却只有一个 ...
- [Luogu 2216] [HAOI2007]理想的正方形
[Luogu 2216] [HAOI2007]理想的正方形 题目描述 有一个a*b的整数组成的矩阵,现请你从中找出一个n*n的正方形区域,使得该区域所有数中的最大值和最小值的差最小. 输入输出格式 输 ...
- HDU 5749 Colmerauer 单调队列+暴力贡献
BestCoder Round #84 1003 分析:(先奉上zimpha巨官方题解) 感悟:看到题解单调队列,秒懂如何处理每个点的范围,但是题解的一句算贡献让我纠结半天 已知一个点的up,do ...
- 【POJ 2823】Sliding Window(单调队列/堆)
BUPT2017 wintertraining(16) #5 D POJ - 2823 题意 给定n,k,求滑窗[i,i+k-1]在(1<=i<=n)的最大值最小值. 题解 单调队列或堆. ...
- 【bzoj3831】[Poi2014]Little Bird 单调队列优化dp
原文地址:http://www.cnblogs.com/GXZlegend/p/6826475.html 题目描述 In the Byteotian Line Forest there are t ...
- [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 ...
- 【DP】【单调队列】洛谷 P2216 [HAOI2007]理想的正方形 题解
算是单调队列的复习吧,不是很难 题目描述 有一个$a\times b$的整数组成的矩阵,现请你从中找出一个$n\times n$的正方形区域,使得该区域所有数中的最大值和最小值的差最小. 输入 ...
- 【BZOJ1047】[HAOI2007]理想的正方形(单调队列,动态规划)
[BZOJ1047][HAOI2007]理想的正方形(单调队列,动态规划) 题面 BZOJ 洛谷 题解 直接一个单调队列维护一下没给点和它前面的\(n\)个位置的最大值,再用一次单调队列维护连续\(n ...
- BZOJ1047: [HAOI2007]理想的正方形 [单调队列]
1047: [HAOI2007]理想的正方形 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2857 Solved: 1560[Submit][St ...
随机推荐
- 基本动画、复合动画设置 平移、缩放、旋转、透明度 编码实现 xml实现
public class VAActivity extends Activity { private ImageView iv_animation; private TextView tv_anima ...
- jquery特效(7)—弹出遮罩层且内容居中
上周写了几个小特效,其中有个点击按钮弹出遮罩层的特效,下面来看最终实现的效果: 由于是测试的程序,所以我未加关闭的按钮. 一.主体程序 <!DOCTYPE html> <html&g ...
- MySQL学习笔记(六)—— MySQL自连接
有的时候我们需要对同一表中的数据进行多次检索,这个时候我们可以使用之前学习过的子查询,先查询出需要的数据,再进行一次检索. 例如:一张products表,有产品id,供应商id(vend_id),产品 ...
- BZOJ 1633 [Usaco2007 Feb]The Cow Lexicon 牛的词典:dp【删字符最少】
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1633 题意: 给你一个长度为n的主串a,和一个有m个字符串s[i]的单词书(s[i].si ...
- hdu 1209 Clock(排序)
题意:按钟表的时针.分针的夹角对5个时间进行升序排序,输出第3个时间 思路:排序 注意:若夹角相同,则按时间进行升序排序 #include<iostream> #include<st ...
- Mutual information and Normalized Mutual information 互信息和标准化互信息
实验室最近用到nmi( Normalized Mutual information )评价聚类效果,在网上找了一下这个算法的实现,发现满意的不多. 浙江大学蔡登教授有一个,http://www.zju ...
- BZOJ2599:[IOI2011]Race
浅谈树分治:https://www.cnblogs.com/AKMer/p/10014803.html 题目传送门:https://www.lydsy.com/JudgeOnline/problem. ...
- 转:CURL库在程序中的运用浅析
CURL库在程序中的运用浅析-nk_ysg-ChinaUnix博客 http://blog.chinaunix.net/uid-22476414-id-3286638.html 这个目录的文章转载fr ...
- py-day1简单使用方法及语法使用详解
一.python入门 1.python的标准格式 创建python文件以.py结尾 如:vi hello.py #!/usr/bin/env python #-*- coding:utf-8 -*- ...
- 方法名的string类型应用(补)
string strClass = "stringConvertClass.test"; //命名空间+类名 string strMethod = "Method&quo ...