FZU 2080 最大差值 二维单调队列(甚是巧妙……)
1 /** 这道题甚是巧妙啊,也是看了别人的代码才A的……,我相信如果你看了以后也会茅塞顿开的 */ 2 #include <iostream> 3 #include <cstdio> 4 using namespace std; 5 #define N 1005 6 7 int head1, tail1, head2, tail2, qMax[N][N], qMin[N][N], matrix[N][N]; 8 9 struct node{ 10 int v, id; 11 }q1[N], q2[N]; 12 13 void addMax( int v, int id ) { //维护队列最大值 14 while( head1 < tail1 && q1[tail1-1].v <= v ) tail1--; 15 q1[tail1].v = v; q1[tail1++].id = id; 16 } 17 18 int getMaxNum( int id ) { 19 while( head1 < tail1 && q1[head1].id < id ) head1++; 20 return q1[head1].v; 21 } 22 23 void addMin( int v, int id ) { 24 while( head2 < tail2 && q2[tail2-1].v >= v ) tail2--; 25 q2[tail2].v = v; q2[tail2++].id = id; 26 } 27 28 int getMinNum( int id ) { 29 while( head2 < tail2 && q2[head2].id < id ) head2++; 30 return q2[head2].v; 31 } 32 33 int main() { 34 int n, m, r, c, i, j; 35 while(scanf("%d%d%d%d", &n, &m, &r, &c) != EOF) { 36 for( i = 0; i < n; ++i ) 37 for( j = 0; j < m; ++j ) scanf("%d", &matrix[i][j]); 38 39 for( j = 0; j < m; ++j ) { 40 head1 = tail1 = head2 = tail2 = 0; 41 for( i = 0; i < r - 1; ++i ) { 42 addMax( matrix[i][j], i ); 43 addMin( matrix[i][j], i ); 44 } 45 /** 这里qMax[i][j]表示第j列, max( matrix[ i->(i+r) ][j] )中的最大值 46 * qMin[i][j],同上。 47 */ 48 for( i = r - 1; i < n; ++i ) { 49 addMax( matrix[i][j], i ); 50 qMax[i-r+1][j] = getMaxNum( i-r+1 ); 51 addMin( matrix[i][j], i ); 52 qMin[i-r+1][j] = getMinNum( i-r+1 ); 53 } 54 } 55 /** 这里qMax[i][j]表示第j列, max( qMax[i][ j->(j+c) ] )中的最大值 56 * 即qMax[i][j]表示以(i,j)为左上角的一个r*c子矩阵中的最大值 57 * qMin[i][j],同上。 58 */ 59 for( i = 0; i < n - c + 1; ++i ) { 60 head1 = tail1 = head2 = tail2 = 0; 61 for( j = 0; j < c - 1; ++j ) { 62 addMax( qMax[i][j], j ); 63 addMin( qMin[i][j], j ); 64 } 65 for( j = c - 1; j < m; ++j ) { 66 addMax( qMax[i][j], j ); 67 qMax[i][j-c+1] = getMaxNum(j-c+1); 68 addMin( qMin[i][j], j ); 69 qMin[i][j-c+1] = getMinNum(j-c+1); 70 } 71 } 72 int res = qMax[0][0] - qMin[0][0]; 73 for( i = 0; i < n - r + 1; ++i ) 74 for( j = 0; j < m - c + 1; ++j ) 75 res = res > qMax[i][j] - qMin[i][j] ? res : qMax[i][j] - qMin[i][j]; 76 printf("%d\n", res); 77 } 78 return 0; 79 }
转载于:https://www.cnblogs.com/yaling/p/3440324.html
FZU 2080 最大差值 二维单调队列(甚是巧妙……)相关推荐
- 【CF 1195】Basketball Exercise/Submarine in the Rybinsk Sea (hard edition)/OpenStreetMap+二维单调队列滑动窗口模板
寡人认为C,E都是比较板的题 butD2也太ex了,大大是被那个mod精给弄疯了,我mod了那么多次还是炸了longlong orz 文章目录 二维单调队列模板 C:Basketball Exerci ...
- 洛谷 P2219修筑绿化带 二维单调队列~
题目链接:https://www.luogu.org/problem/P2219 emmm调了一个上午+中午,fan 题意:从N*M的中找到一个a*b的大矩形和减去a*b中的一个与之不重边界的c*d的 ...
- java_微信公众号扫码绑定个人信息(微信公众号场景值二维码的使用)
看了一下网上关于公众号场景值二维码这方面的教程,基本上是微信官方开发文档的复制,没有具体实例.这里给出实例,并附加二维码url转文件流的方法. 思路: 1.后台传入个人信息保存,以个人信息的" ...
- 【BZOJ-28921171】强袭作战大sz的游戏 权值线段树+单调队列+标记永久化+DP...
2892: 强袭作战 Time Limit: 50 Sec Memory Limit: 512 MB Submit: 45 Solved: 30 [Submit][Status][Discuss] ...
- 算法竞赛入门与进阶 (二)单调队列、单调栈
栈(stack)和队列( queue ) 1.栈的定义:栈是限定仅在表头进行插入和删除操作的线性表(先进后出) 2.队列的定义:队列是一种特殊的线性表,特殊之处在于 它只允许在表的前端(front)进 ...
- 单调队列优化的DP问题
概述 单调队列就是通过排除求最值时候的冗余,从而是队列具有性质,可以方便求解问题. DP的两个阶段: 朴素DP的基本原理--闫氏DP分析法 对朴素DP进行优化 闫氏DP分析法的拓展 :在一个有限的集合 ...
- CSP2019洛谷P5665:划分(单调队列,高精度)
解析 自己写的时候写了二维单调队列优化的64分 一次过还是可以满意了啦 正解的关键结论是最优的方案的最后一段一定尽可能的短 原因嘛-显然 贪心的想,再最后一段的段首可以往前放的情况下肯定是要往前放的, ...
- bzoj1047 [HAOI2007]理想的正方形 单调队列
这种在矩形里面找矩形有固定的套路,不是容斥就是左右上下延伸,这个题就是向左向右延伸.. 然后手玩优化发现邻位转移比暴力要好一些,可以用splay统计,但复杂度不对 然后由于每一行互不影响于是可以单行同 ...
- 洛谷试炼场 4-8单调队列
layout: post title: 洛谷试炼场 4-8单调队列 author: "luowentaoaa" catalog: true mathjax: true tags: ...
最新文章
- Visual Studio Code / Roboware Studio调整字体大小,跳转等操作
- logback logback.xml常用配置详解(三) filter
- AndroidStudio中提示:uses-sdk:minSdkVersion 16 cannot be smaller than version 19 declared in libr
- layui富文本编译器添加图片
- android返回后屏幕旋转了,Android recovery 模式下屏幕显示旋转
- python学习之路基础篇(第八篇)
- ssm 转发请求_千呼万唤!阿里内部终于把这份SSM框架技术学习笔记分享出来了...
- 有效提高作品率的UI设计技巧,你知道多少?
- react native 处理iOS和安卓系统文字
- python手机版-python做app
- 【数学】指数函数与对数函数的导数证明
- css本文在背景之上,css实现文字在背景图片之上
- java定义一个描述三角形的类_用java语言定义一个三角形类 Triangle ,
- EBP与ESP的作用
- 一套仿英雄联盟大型多人联机实时对战游戏源码(包含完整服务器和客户端源码)...
- es多个字段排序_如何解决 ES 复杂聚合排序问题(嵌套桶排序)?
- Silvaco学习笔记(九)毕设相关
- KITTI数据集下载(百度云)
- 安卓手机开机动画制作修改教程
- 通过Teamview后台去除限制