luogu 2216 理想的正方形 单调队列(其实没有DP)
#include<bits/stdc++.h> using namespace std; const int A=;
const int N=;
int a,b,n;
int g[A][A],q[A][N],Q[A][N];
int head[A],tail[A];
int Head[A],Tail[A]; inline int read(){
int x=,f=;char ch=getchar();
while(!isdigit(ch)){if(ch=='-')f=-;ch=getchar();}
while(isdigit(ch)){x=(x<<)+(x<<)+(ch^);ch=getchar();}
return x*f;} int main(){
a=read(),b=read(),n=read();
for(register int i=;i<=a;i++)
for(register int j=;j<=b;j++) g[i][j]=read(); for(register int j=;j<=b;j++){
head[j]=tail[j]=;
Head[j]=Tail[j]=;
for(register int i=;i<=n-;i++){
while(head[j]<=tail[j]&&g[i][j]<=g[q[j][tail[j]]][j]) tail[j]--;
q[j][++tail[j]]=i;
while(Head[j]<=Tail[j]&&g[i][j]>=g[Q[j][Tail[j]]][j]) Tail[j]--;
Q[j][++Tail[j]]=i;
}
}
int ans=0x3f3f3f3f;
for(register int i=n;i<=a;i++){
for(register int j=;j<=b;j++){
while(head[j]<=tail[j]&&q[j][head[j]]<i-n+) head[j]++;
while(head[j]<=tail[j]&&g[i][j]<=g[q[j][tail[j]]][j]) tail[j]--;
q[j][++tail[j]]=i; while(Head[j]<=Tail[j]&&Q[j][Head[j]]<i-n+) Head[j]++;
while(Head[j]<=Tail[j]&&g[i][j]>=g[Q[j][Tail[j]]][j]) Tail[j]--;
Q[j][++Tail[j]]=i;
}
for(register int j=n;j<=b;j++){
int mi=0x3f3f3f3f,mx=-0x3f3f3f3f;
for(register int k=j-n+;k<=j;k++){
mi=min(mi,g[q[k][head[k]]][k]);
mx=max(mx,g[Q[k][Head[k]]][k]);
}
ans=min(ans,mx-mi);
}
}
printf("%d\n",ans);return ;
}
二维单调队列
luogu 2216 理想的正方形 单调队列(其实没有DP)的更多相关文章
- Luogu 2216[HAOI2007]理想的正方形 - 单调队列
Solution 二维单调队列, 这个数组套起来看得我眼瞎... Code #include<cstdio> #include<algorithm> #include<c ...
- 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\)的正方形区域,使得该区域所有数中的最 ...
- BZOJ 1047 理想的正方形(单调队列)
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1047 题意:给出一个n*m的矩阵.在所有K*K的子矩阵中,最大最小差值最小的是多少? 思 ...
- bzoj1047/luogu2216 理想的正方形 (单调队列)
开b组单调队列,分别维护此时某一列中的最大/最小值 然后我每次把它们的头取出来,塞到维护行的单调队列里,就是n*n的最大/最小值 #include<bits/stdc++.h> #defi ...
- BZOJ 1047: [HAOI2007]理想的正方形 单调队列瞎搞
题意很简明吧? 枚举的矩形下边界和右端点即右下角,来确定矩形位置: 每一个纵列开一个单调队列,记录从 i-n+1 行到 i 行每列的最大值和最小值,矩形下边界向下推移的时候维护一下: 然后在记录的每一 ...
- [HAOI2007] 理想的正方形 (单调队列)
题目链接 Solution MD,经过这道题,算是掌握单调队列了... 可以先预处理出点 \((i,j)\) 往上 \(n\) 的最大值和最小值. 然后再横着做一遍单调队列即可. Code #incl ...
随机推荐
- 利用mysqldump命令导出为csv格式文件
解决方法: 先导出为txt文件,其内容是以逗号“,”分隔的,得到txt文件后,再自行处理为.csv或者.xls文件. 参数说明: -t, --no-create-info Don't write ...
- 对于submit text3运行Python脚本的解决方法
先抛出一些配置信息吧 电脑安装了Python2和Python3两种版本,并且还改了exe文件的名字,可能这与默认的submit text3配置不同了吧,导致错误. 先抛出一些错误吧 首先,自动CTRL ...
- 百度地图API:自定义控件
HTML: <!DOCTYPE html> <html> <head> <meta name="viewport" content=&qu ...
- 使用jquery.pjax实现SPA单页面应用
前面文章介绍了前端路由简单实现和Pjax入门方面的文章,今天来分享一个单页面应用神器jquery.pjax.js. HTML 我们准备一个加载div#loading,默认隐藏,ajax请求的时候才显示 ...
- RAP Mock.js语法规范
Mock.js 的语法规范包括两部分: 数据模板定义规范(Data Template Definition,DTD) 数据占位符定义规范(Data Placeholder Definition,DPD ...
- Redis高并发和快速的原因
一.Redis的高并发和快速原因 1.redis是基于内存的,内存的读写速度非常快: 2.redis是单线程的,省去了很多上下文切换线程的时间: 3.redis使用多路复用技术,可以处理并发的连接 ...
- TestNg 4.组测试中的方法分组测试
看以下代码: package com.course.testng.groups; import org.testng.annotations.AfterGroups; import org.testn ...
- 当我new class的时候,提示以下错误: Unable to parse template "Class" Error message: This template did not produce a Java class or an interface Error parsing file template: Unable to find resource 'Package Header.j
你肯定修改过class的template模板,改回去就好了 #if (${PACKAGE_NAME} && ${PACKAGE_NAME} != "")packag ...
- c#反射(1)
反射可以读取程序集中代码的内容,程序集一般指(dll或exe文件). 反射中Type类,这个类太强大了,可以获取到另一个类的名称,命名空间,程序集,以及这个类中的字段,属性,方法.可以方便我们查看某个 ...
- HDU3974 Assign the task
Assign the task Time Limit: 15000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...