Largest Submatrix of All 1’s
Time Limit: 5000MS   Memory Limit: 131072K
Total Submissions: 5883   Accepted: 2217
Case Time Limit: 2000MS

Description

Given a m-by-n (0,1)-matrix, of all its submatrices of all 1’s which is the largest? By largest we mean that the submatrix has the most elements.

Input

The input contains multiple test cases. Each test case begins with m and n (1 ≤ mn ≤ 2000) on line. Then come the elements of a (0,1)-matrix in row-major order on m lines each with n numbers. The input ends once EOF is met.

Output

For each test case, output one line containing the number of elements of the largest submatrix of all 1’s. If the given matrix is of all 0’s, output 0.

Sample Input

2 2
0 0
0 0
4 4
0 0 0 0
0 1 1 0
0 1 1 0
0 0 0 0

Sample Output

0
4

Source

POJ Founder Monthly Contest – 2008.01.31, xfxyjwf

最大全1子矩阵

对于每一行,维护一个全1高度(tot)递减栈就行了
注意0时tot[j]=-1,相当于一个高度为0的
最后依旧要弹出栈里的,如果没有上一行连sample都错
注意l已经包含了这个点,最后+n-st[top].pos不需要再+1
//
//  main.cpp
//  poj3494
//
//  Created by Candy on 10/5/16.
//  Copyright © 2016 Candy. All rights reserved.
//

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
typedef long long ll;
const int N=2e3+5;
inline int read(){char c=getchar();int x=0,f=1;while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}return x;
}
int n,m,tot[N],a,ans=0;
struct data{int h,l,pos;
}st[N];
int top=0;
int main(int argc, const char * argv[]) {while(scanf("%d%d",&n,&m)!=EOF){ans=0;memset(tot,0,sizeof(tot));for(int i=1;i<=n;i++){top=0;for(int j=1;j<=m;j++){a=read();if(!a) tot[j]=-1;data t;t.h=++tot[j];t.l=1;t.pos=j;int right=0;while(top&&st[top].h>=t.h){ans=max(ans,(st[top].l+right)*st[top].h);//printf("%d %d %d  %d %d %d\n",i,j,ans,st[top].l,right,st[top].h);right+=st[top].l; t.l+=st[top].l;top--;}st[++top]=t;//printf("top %d\n",top);}//printf("toptop %d\n",top);while(top){ans=max(ans,st[top].h*(st[top].l +n-st[top].pos));//printf("p %d %d %d %d\n",st[top].h,st[top].pos,st[top].l,ans);top--;}}printf("%d\n",ans);}return 0;
}

转载于:https://www.cnblogs.com/candy99/p/5933271.html

POJ3494Largest Submatrix of All 1’s[单调栈]相关推荐

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

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

  2. 2019ICPC(银川) - Largest Common Submatrix(单调栈)

    题目链接:点击查看 题目大意:给出两个n*m的矩阵,问最大的公共子矩阵的面积是多少 题目分析:一开始看到这个题目是想到了一个n^4的算法..就是暴力枚举,肯定是不行的了,最后的时候还是队友把思路一步步 ...

  3. POJ2796 Feel Good(单调栈)

    题意: 给出一列数据,要求一个区间内最小值与区间内数据总和乘积最大值 要点: 还是单调栈,这次我自己写的,先做了几题比较简单的果然还是有效果的,这题也是一样,按点遍历,网上大神做的是直接遍历一次即可, ...

  4. 【单调栈 前缀和 异或】7.21序列求和

    还要再细细思考的奇妙思路 题目描述 小A最近喜欢上了关于区间max的问题.她定义一个区间的价值是max(ai)(l<=i<=r)∗(alxoral+1xor...xorar)max(ai) ...

  5. 栈与队列7——单调栈结构(进阶问题)

    题目 一个含有重复值的数组arr,找到每一个i位置左边和右边离i位置最近且值比arr[i]小的位置,返回所有相应的信息. 举例:arr={3,4,1,5,6,2,7},返回如下的二维数组作为结果:{{ ...

  6. 栈与队列7——单调栈结构(初阶问题)

    题目 一个不含有重复值的数组arr,找到每一个i位置左边和右边离i位置最近且值比arr[i]小的位置,返回所有相应的信息. 举例:arr={3,4,1,5,6,2,7},返回如下的二维数组作为结果:{ ...

  7. 单调栈 or 线段树扫描线 ---- E. Delete a Segment [单调栈+二分] [扫描线处理空白位置的技巧乘2]

    题目链接 题目大意: 给出nnn个线段代表集合,现在问若可以将其中任意一个线段删除,则能够形成最多多少个独立的集合(取并集后) 解题思路1: 首先我们先对线段按照起点排序 那么我们枚举删除的线段iii ...

  8. 后缀数组 ---- 2018~2019icpc焦作H题[后缀数组+st表+二分+单调栈]

    题目链接 题目大意: 给出nnn个数,定义f[l,r]f[l,r]f[l,r]表示 区间[l,r][l,r][l,r]的最大值,求所有 子区间的最大值的和,要求相同的子区间只能算一次 比如数列 5 6 ...

  9. [Ahoi2013]差异[后缀数组+单调栈]

    链接 解题思路:很明显前面∑1<=i<j<=nlen(Ti)+len(Tj)\sum_{1<=i<j<=n}len(T_i)+len(T_j)∑1<=i< ...

  10. 【每日训练】2020/11/8(规律 + 二进制、单调栈 + 前缀和,后缀和、bitset + 枚举)

    整理的算法模板合集: ACM模板 目录 1. NC 打铁的箱子(规律 + 二进制) 2. NC 最优屏障(单调栈 + 前缀和,后缀和) 3. CF993C Careful Maneuvering(bi ...

最新文章

  1. mysql自增长2个增加_mysql – 添加第二个自动增量字段并允许重复
  2. CF1202 - E. You Are Given Some Strings...(AC自动机)
  3. volatile 关键字是如何保证可见性的?
  4. SpringCloud版本说明
  5. 16、mysql中函数的创建和使用
  6. 安卓java桌面图标程序_android如何定制默认桌面上应用程序和shortcut图标 | 学步园...
  7. 学平面设计,你必须知道这些提供素材和灵感的地方!
  8. java 测试磁盘io,详解三种Linux测试磁盘IO性能的方法总结,值得收藏
  9. 为Exchange Server创建多主机名证书
  10. 【OpenGL】Shader实例分析(七)- 雪花飘落效果
  11. [Luogu] 被污染的河流
  12. python经纬度是否在范围内_如何用经纬度数据在python里查询城市等地址信息
  13. 最新美团Java面试题目(共3面)
  14. python连连看小游戏_python之自动化连连看脚本-第一关不动-小记
  15. SQL点滴25—T-SQL面试语句,练练手
  16. 计算机桌面的图标怎么删除,电脑桌面图标有箭头怎么去掉?
  17. RAM和ROM存储空间的混合
  18. mysql数据库击穿_面试中经常出现的缓存穿透、雪崩和击穿到底是什么?
  19. 团队中的“个人英雄主义”
  20. 批量微信过滤软件 开通微信号码筛选

热门文章

  1. .html(),.text()和.val()的差异总结:
  2. 【渝粤教育】国家开放大学2018年秋季 0313-22T促销策划与实战 参考试题
  3. 【渝粤教育】国家开放大学2018年秋季 0056-21T知识产权法 参考试题
  4. CString转char*的两种方法讨论
  5. 无约束最优化(二) 共轭方向法与共轭梯度法
  6. ubuntu16.04下ROS操作系统学习笔记(九)Moveit
  7. python-14:迭代器 生成器,3种方法:g.__next__() next(g) g.send(value)
  8. Java同步数据结构之ConcurrentLinkedDeque
  9. 网络是怎样连接的笔记第5章 防火墙,缓存服务器
  10. shardedJedisPool工具类