[HAOI2007]理想的正方形 单调队列 暴力
Code:
#include<cstdio>
#include<queue>
#include<algorithm>
using namespace std;
#define maxn 1002
#define ll long long
#define inf 100000000000
int minv[maxn][maxn], maxv[maxn][maxn];
struct Node{
ll val;
int pos;
Node(ll val=0,int pos=0):val(val),pos(pos){}
};
deque<Node>Q[2];
int main(){
//freopen("input.in","r",stdin);
int a,b,n;
ll ans=inf,p;
scanf("%d%d%d",&a,&b,&n);
for(int i=1;i<=a;++i){
for(int j=1;j<=b;++j) {
scanf("%lld",&p);
while(!Q[0].empty()&&Q[0].front().pos<j-n+1)Q[0].pop_front();
while(!Q[1].empty()&&Q[1].front().pos<j-n+1)Q[1].pop_front();
while(!Q[0].empty()&&Q[0].back().val>=p) Q[0].pop_back();
while(!Q[1].empty()&&Q[1].back().val<=p) Q[1].pop_back();
Q[0].push_back(Node(p,j)),Q[1].push_back(Node(p,j));
if(j>=n) minv[i][j]=Q[0].front().val, maxv[i][j]=Q[1].front().val;
}
while(!Q[0].empty())Q[0].pop_back();
while(!Q[1].empty())Q[1].pop_back();
}
for(int i=n;i<=b;++i){
for(int j=1;j<=a;++j){
while(!Q[0].empty()&&Q[0].front().pos<j-n+1)Q[0].pop_front();
while(!Q[1].empty()&&Q[1].front().pos<j-n+1)Q[1].pop_front();
while(!Q[0].empty()&&Q[0].back().val>=minv[j][i]) Q[0].pop_back();
while(!Q[1].empty()&&Q[1].back().val<=maxv[j][i]) Q[1].pop_back();
Q[0].push_back(Node(minv[j][i],j)),Q[1].push_back(Node(maxv[j][i],j));
if(j>=n) ans=min(ans,Q[1].front().val-Q[0].front().val);
}
while(!Q[0].empty())Q[0].pop_back();
while(!Q[1].empty())Q[1].pop_back();
}
printf("%lld",ans);
return 0;
}
[HAOI2007]理想的正方形 单调队列 暴力的更多相关文章
- BZOJ1047: [HAOI2007]理想的正方形 [单调队列]
1047: [HAOI2007]理想的正方形 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2857 Solved: 1560[Submit][St ...
- 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) (话说还是 ...
- P2216 [HAOI2007]理想的正方形 (单调队列)
题目链接:P2216 [HAOI2007]理想的正方形 题目描述 有一个 \(a\times b\)的整数组成的矩阵,现请你从中找出一个 \(n\times n\)的正方形区域,使得该区域所有数中的最 ...
- Luogu 2216[HAOI2007]理想的正方形 - 单调队列
Solution 二维单调队列, 这个数组套起来看得我眼瞎... Code #include<cstdio> #include<algorithm> #include<c ...
- BZOJ 1047: [HAOI2007]理想的正方形 单调队列瞎搞
题意很简明吧? 枚举的矩形下边界和右端点即右下角,来确定矩形位置: 每一个纵列开一个单调队列,记录从 i-n+1 行到 i 行每列的最大值和最小值,矩形下边界向下推移的时候维护一下: 然后在记录的每一 ...
- [HAOI2007] 理想的正方形 (单调队列)
题目链接 Solution MD,经过这道题,算是掌握单调队列了... 可以先预处理出点 \((i,j)\) 往上 \(n\) 的最大值和最小值. 然后再横着做一遍单调队列即可. Code #incl ...
- 洛谷P2216: [HAOI2007]理想的正方形 单调队列优化DP
洛谷P2216 )逼着自己写DP 题意: 给定一个带有数字的矩阵,找出一个大小为n*n的矩阵,这个矩阵中最大值减最小值最小. 思路: 先处理出每一行每个格子到前面n个格子中的最大值和最小值.然后对每一 ...
- BZOJ 1047 理想的正方形(单调队列)
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1047 题意:给出一个n*m的矩阵.在所有K*K的子矩阵中,最大最小差值最小的是多少? 思 ...
随机推荐
- 21.boost Ford最短路径算法(效率低)
到某个节点最近距离 最短路径当前节点的父节点 完整代码 #include <iostream> #include <string> #incl ...
- java类型与Hadoop类型之间的转换
java基本类型与Hadoop常见基本类型的对照Long LongWritableInteger IntWritableBoolean BooleanWritable String Text ...
- 你不知道的JavaScript(二)数组
作为一种线性数据结构,几乎每一种编程语言都支持数组类型.和c++.java这些强类型的语言相比,JavaScript数组有些不同,它可以存放任意类型的值.上节中有提到过JS中任意类型的值都可以赋值给任 ...
- shell-3.bash的基本功能:多命令顺序执行与管道符
1. 2.
- 安卓怎么不如ios运行流畅
一.优先级别不同:iOS最先响应屏幕当我们使用iOS或者是Android手机时,第一步就是滑屏解锁找到相应程序点击进入.而这个时候往往是所有操控开始的第一步骤,iOS系统产品就表现出来了流畅的一面,但 ...
- ZBrush功能特性之变形
使用ZBrush内置的变形功能可以让用户对三维网格轻松应用扭曲.拉伸.弯曲及其他各种变化.在ZBrush当中,有超过20种的强大变形类型,可以应用于任何轴向.用户只需单击几次即可创造出高级形状,如图所 ...
- 安装lnmp前请先运行screen
当通过putty或者SecureCRT安装lnmp时, 网络突然掉线或者不小心putty被关掉等等原因, 造成lnmp安装过程被中断怎么办? 其实防止这种现象很简单, 只要在安装lnmp前执行scre ...
- System.getProperty可以获取的参数
java.version Java 运行时环境版本 java.vendor Java 运行时环境供应商 java.vendor.url Java 供应商的 URL java.home Java 安装目 ...
- React 第二天
第二天 01 关于Vue和React中key的作用 在循环的时候一定要为组件加key 02关于jsx语法的注意事项 jsx中的注释 {/* */} class要写成className label标签 ...
- du -sh*查看当前目录下的文件夹大小
du -sh*查看当前目录下的文件夹大小 u 命令 用途 概述磁盘使用. 语法 du [ -a | -s ] [ -k ] [ -m ] [ -g ][ -l ] [ -r ] ...