洛谷p2216 多次单调队列,扫描矩阵中的最大值减去最小值最的固定大小子矩阵
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int a,b,n;
int m[1005][1005],q[7][1005][2005];
int head[7][1005],tail[7][1005],l[5][1005],r[3][1005];
int main(){
while(~scanf("%d%d%d",&a,&b,&n)){
int i,j,k;
for(i=1;i<=a;++i){
for(j=1;j<=b;++j){
scanf("%d",&m[i][j]);
}
}
for(i=1;i<=b;++i) {
l[2][i]=r[2][i]=1;
}
memset(head,0,sizeof(head));
memset(tail,0,sizeof(tail));
int ans=~(0u)>>1;
for(i=1;i<=a-n+1;++i){
int row=i;
l[1][i]=r[1][i]=1;
while(r[1][i]<=b){
while(r[1][i]-l[1][i]+1<=n){
int col=r[1][i];
while(r[2][col]-l[2][col]+1<=n){
int t=r[2][col];
while(head[3][col]!=tail[3][col]&&m[q[3][col][tail[3][col]-1]][col]<=m[t][col]) tail[3][col]--;
q[3][col][tail[3][col]++]=t;
while(head[4][col]!=tail[4][col]&&m[q[4][col][tail[4][col]-1]][col]>=m[t][col]) tail[4][col]--;
q[4][col][tail[4][col]++]=t;
r[2][col]++;
}
while(head[1][row]!=tail[1][row]&&head[5][row]!=tail[5][row]&&m[q[5][row][tail[5][row]-1]][q[1][row][tail[1][row]-1]]<=m[q[3][col][head[3][col]]][col])
{ tail[1][row]--,tail[5][row]--;
}
q[1][row][tail[1][row]++]=col,q[5][row][tail[5][row]++]=q[3][col][head[3][col]];
while(head[2][row]!=tail[2][row]&&head[6][row]!=tail[6][row]&&m[q[6][row][tail[6][row]-1]][q[2][row][tail[2][row]-1]]>=m[q[4][col][head[4][col]]][col])
{
tail[2][row]--,tail[6][row]--;
}
q[2][row][tail[2][row]++]=col,q[6][row][tail[6][row]++]=q[4][col][head[4][col]];
l[2][col]++;
while(head[3][col]!=tail[3][col]&&q[3][col][head[3][col]]<l[2][col]) head[3][col]++;
while(head[4][col]!=tail[4][col]&&q[4][col][head[4][col]]<l[2][col]) head[4][col]++;
r[1][i]++;
}
ans=min(ans,m[q[5][row][head[5][row]]][q[1][row][head[1][row]]]-m[q[6][row][head[6][row]]][q[2][row][head[2][row]]]);
l[1][i]++;
while(head[1][row]!=tail[1][row]&&q[1][row][head[1][row]]<l[1][i]) head[1][row]++,head[5][row]++;
while(head[2][row]!=tail[2][row]&&q[2][row][head[2][row]]<l[1][i]) head[2][row]++,head[6][row]++;
}
}
printf("%d\n",ans);
}
return 0;
}
竖着跑一遍单调队列,跑完竖的所有列,再对所有列的最值跑一遍行的
洛谷p2216 多次单调队列,扫描矩阵中的最大值减去最小值最的固定大小子矩阵的更多相关文章
- 洛谷P1776--宝物筛选(单调队列+多重背包)
https://www.luogu.org/problemnew/show/P1776 单调队列+多重背包的讲解https://www.cnblogs.com/JoeFan/p/4165956.htm ...
- 洛谷P1886--滑动窗口(单调队列模板)
https://www.luogu.org/problemnew/show/P1886 单调队列的操作上比普通队列多了可以从尾端出队 单调队列保持队内元素单调递增/递减,以保证队首元素为最小/最大元素 ...
- [洛谷P1886]滑动窗口 (单调队列)(线段树)
---恢复内容开始--- 这是很好的一道题 题目描述: 现在有一堆数字共N个数字(N<=10^6),以及一个大小为k的窗口. 现在这个从左边开始向右滑动,每次滑动一个单位,求出每次滑动后窗口中的 ...
- 【洛谷】【动态规划+单调队列】P1714 切蛋糕
[题目描述:] 今天是小Z的生日,同学们为他带来了一块蛋糕.这块蛋糕是一个长方体,被用不同色彩分成了N个相同的小块,每小块都有对应的幸运值. 小Z作为寿星,自然希望吃到的第一块蛋糕的幸运值总和最大,但 ...
- 【洛谷】【动态规划+单调队列】P1725 琪露诺
[题目描述:] 在幻想乡,琪露诺是以笨蛋闻名的冰之妖精. 某一天,琪露诺又在玩速冻青蛙,就是用冰把青蛙瞬间冻起来.但是这只青蛙比以往的要聪明许多,在琪露诺来之前就已经跑到了河的对岸.于是琪露诺决定到河 ...
- 洛谷 P1886 滑动窗口(单调队列)
题目链接 https://www.luogu.org/problemnew/show/P1886 题目描述 现在有一堆数字共N个数字(N<=10^6),以及一个大小为k的窗口.现在这个从左边开始 ...
- 洛谷luogu3957跳房子(单调队列优化)
QwQ被普及组的题折磨的死去活来. 硬是卡线段树,没卡过QwQ oi生涯,第一道正经的单调队列dp题 进入正题 题目大意: 其中\(n \le 500000\) 看到这个题的第一感觉就是二分金币数 很 ...
- 洛谷 P1714 切蛋糕 单调队列
这个题比较显然,要用前缀和来做.但只用前缀和是过不去的,会TLE,所以需要进行优化. 对于每个前缀和数组 b 中的元素,都可以找到以 b[i] 结尾的子段最大值 p[i],显然,最终的 ans 就是 ...
- 洛谷P2564 生日礼物【单调队列】
题目背景 四川2009NOI省选 题目描述 小西有一条很长的彩带,彩带上挂着各式各样的彩珠.已知彩珠有N个,分为K种.简单的说,可以将彩带考虑为x轴,每一个彩珠有一个对应的坐标(即位置).某些坐标上可 ...
随机推荐
- CUDA 介绍
1. 介绍 1.1 GPU vs. CPU GPU 使用更多的晶体管进行数据处理,而不是数据缓存和流控制,因此可以提供高度的并行计算. GPU 可以通过计算来隐藏内存访问延迟,而不是依赖于大量的数据缓 ...
- DDOS攻击方式总结以及免费DDOS攻击测试工具大合集
若有雷同或者不足之处,欢迎指正交流,谢谢! DoS(Denial Of Service)攻击是指故意的攻击网络协议实现的缺陷或直接通过野蛮手段残忍地耗尽被攻击对象的资源,目的是让目标计算机或网络无法提 ...
- 【Soul网关探秘】http数据同步-Admin通知前处理
引言 本篇开始研究 Soul 网关 http 数据同步,将分为三篇进行分析: <Admin通知前处理> <变更通知机制> <Bootstrap处理变更通知> 希望三 ...
- Java并发组件三之Semaphore
使用场景:常用于使用有限的资源,限制线程并发的最大数量.默认情况下,信号量是非公平性的(先等待先执行为公平.类似于买东西的时候大家排队付款,先来的先付款是公平的.但是这时候有人插队,那就是非公平的)设 ...
- 一例 Go 编译器代码优化 bug 定位和修复解析
https://mp.weixin.qq.com/s/Tyl6dSb7mHBuqqN6WvEuaw
- SICP 解题集 — SICP 解题集 https://sicp.readthedocs.io/en/latest/
SICP 解题集 - SICP 解题集 https://sicp.readthedocs.io/en/latest/
- .htaccess 和 .user.ini
.htaccess 仅能用于apache下,并且内容严格,不能有错误行,如:GIF89a .user.ini php 5.3.0开始引入,可设置除了:PHP_INI_SYSTEM 外的其他,包括(PH ...
- Java三种IO模型和LinuxIO五种IO模型
Java: https://github.com/Snailclimb/JavaGuide/blob/master/docs/java/BIO-NIO-AIO.md https://github.co ...
- Rsync同步工具
1.Rsync介绍 1.1 什么是Rsync? Rsync,remote synchronize顾名思意就知道它是一款实现远程同步功能的软件,它在同步文件的同时,可以保持原来文件的权限.时间.软硬链接 ...
- dedecms后台更新网站栏目无反应的解决方法
dedecms进行第二次模板开发后,遇到在栏目更新的时候没有反应,但是用回原来的初始模板就可以,百度查找了很多的教程也无法进行解决,就这样慢慢的摸索.终于找到了问题的所在,原因可能是该更新的时候无法获 ...