前置问题:51nod 1102 面积最大的矩形

附上链接:
51nod 1102 面积最大的矩形
这题的题解博客

需要了解的知识:单调栈,在前置问题中已经讲解。

解题思路

  1. 对每行求左边连续1的个数,得到数组a[i][j];
  2. 对于第j列,找出每个位置i的数字a[i][j]上面第一个比它小数字l,和下面第一个比它小的数字r。
  3. 由这个点所在列为底,这个点的数字为最小值产生的矩形的面积为a[i][j]*(r-l-1),用这一列每一个面积更新ans。
  4. 上面2的求法就是单调栈了,总时间复杂度o(n*m)。

代码:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int a[510][510];
int l[510],r[510];
int main(){ios::sync_with_stdio(false);int m,n;cin >> m >> n;for(int i = 1;i <= m; ++i){for(int j = 1;j <= n; ++j){cin >> a[i][j];if(a[i][j] == 1)  a[i][j] += a[i][j-1];}}int ans = 0;for(int i = 1;i <= n; ++i){memset(l,0,sizeof(l));memset(r,0,sizeof(r));stack<int> s; s.push(1);a[0][i] = a[m+1][i] = -1;for(int j = 2;j <= m+1; ++j){while(s.size() and a[j][i] < a[s.top()][i]){r[s.top()] = j;s.pop();}s.push(j);}while(s.size()) s.pop();s.push(m);for(int j = m-1;j >= 0; --j){while(s.size() and a[j][i] < a[s.top()][i]){l[s.top()] = j;s.pop();}s.push(j);}for(int j = 1;j <= m; ++j){ans = max(ans, (r[j]-l[j]-1)*a[j][i]);}}cout << ans << endl;return 0;
}

51nod 1158 全是1的最大子矩阵(单调栈 ,o(n*m))相关推荐

  1. 51Nod 1102 面积最大的矩形 +1272 最大距离 单调栈

    51Nod 1102 面积最大的矩形 记笔记记笔记:对于区间最值与区间长度/和等的问题,用单调栈来维护区间端点. 这里来补一补单调栈和单调队列的基础知识: 单调栈:                   ...

  2. 【51nod P2500】后面第一个大于【单调栈】

    l i n k link link 分析: 单调栈倒着做 a n s ans ans就是栈顶到第一个找出最大的距离 CODE: #include<iostream> #include< ...

  3. 1157 全是1的最大子矩阵

    题目链接:http://www.51nod.com/Challenge/Problem.html#problemId=1157 1157 全是1的最大子矩阵 1.0 秒 131,072.0 KB 40 ...

  4. 【2019牛客暑期多校训练营(第二场) - H】Second Large Rectangle(单调栈,全1子矩阵变形)

    题干: 链接:https://ac.nowcoder.com/acm/contest/882/H 来源:牛客网 题目描述 Given a N×MN \times MN×M binary matrix. ...

  5. 单调栈求全1(或全0)子矩阵的个数 洛谷P5300与或和 P3400仓鼠窝

    爆零好爽,被中学生虐好爽,还好我毕业得早 求全1(或全0)子矩阵的个数,看了题解有好几种思路,我学了三种,但有两种不是很理解,而且也没另外那个跑得快,所以简单讲述一一下我会的那种来自Caro23333 ...

  6. C语言求最大正方形子矩阵,动态规划—统计全为1的正方形子矩阵个数|最大正方形...

    最大正方形 (统计全为 1 的正方形子矩阵) 解析可以参考leetcode解析 public class Solution { public int countSquares(int[][] matr ...

  7. 小A的柱状图(单调栈+前缀)+最大子矩阵

    链接:https://ac.nowcoder.com/acm/contest/549/H 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言5242 ...

  8. 【HDOJ6957】Maximal submatrix(单调栈,最大子矩阵面积)

    1008 Maximal submatrix 题意: 给出一个n*m的矩阵,求一个面积最大的子矩阵满足子矩阵的每一列都是单调不递减的 思路: 转化为01矩阵 每个位置1代表该位是否比上面一位小,然后用 ...

  9. 【51nod】【单调栈】扔盘子

    [51nod][单调栈]扔盘子 题目 解题思路 因为井的宽度是不确定的 先将其处理成一个下降序列 (因为如果a1<a2,一个比a1大的盘也一定不会去到a2) 接着一个一个丢盘子,记录所到的高度, ...

最新文章

  1. 开头轰轰烈烈,结局冷冷清清
  2. Keras vs PyTorch,哪一个更适合做深度学习?
  3. 新基建数据中心如何建?附建设导则
  4. ST17H26 SDK中宏定义注意事项
  5. 16进制字符串转化为10进制数
  6. vb microsoft.xmlhttp 获取所有超链接_编写我的第一个VB程序
  7. hg更新下载指定版本
  8. SpringCloud整合Feign配置类之间的关系以及feign配置隔离的实现
  9. SQL2005开发版下载地址
  10. 数据科学家成长指南(上)
  11. 用计算机证明的定理,定理机器证明
  12. 图漾科技招聘|机器视觉算法、嵌入式驱动开发高级工程师等岗位
  13. js 格式化,过万转换成万(W),过亿转化成亿(M)
  14. 计算机桌面没有cd驱动器,电脑没有光盘驱动器怎么解决?
  15. 计算机上海专业排名,2019上海软科世界一流学科排名计算机科学与工程专业排名斯坦福大学排名第2...
  16. MATLAB调用pointgrey相机配置过程——使用spinnaker SDK
  17. 学校计算机教研组会议记录,教研组会议记录3篇精选范文
  18. JUC回顾之-ThreadPoolExecutor的原理和使用
  19. IM即时通讯-从0到1的实践(一)
  20. maven注册本地jar包

热门文章

  1. C语言学习之分别用while、for 编写程序,计算1+2+3+......+100的值
  2. OpenCV C++ 08 - Homogeneous Blur on Images with OpenCV
  3. 深入理解计算机操作系统:第2章 信息的表示和处理(学习笔记)
  4. Spring中ApplicationContextAware的用法
  5. 在最美好的年华里,不要辜负最美的自己
  6. iOS基础 - 文本属性Attributes
  7. 牛客网(剑指offer) 第十六题 合并两个排序的链表
  8. 【Python数据挖掘课程】五.线性回归知识及预测糖尿病实例
  9. 【数据结构与算法】之深入解析“正则表达式匹配”的求解思路与算法示例
  10. App设计灵感之十二组精美的旅行App设计案例