51nod1158 最大子矩形 单调栈应用
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int mp[][6],m,n,ans;
void work(int i){//以第i行为底的矩阵
int stk[6],w[]={},h[]={},top=;//高度栈,左宽栈
memset(stk,-,sizeof stk);
for(int j=;j<=m;j++)h[j]=mp[i][j];
for(int j=;j<=m;j++){
if(h[j]>stk[top])
stk[++top]=h[j],w[top]=;
else {
int cnt=;
while(top>= && stk[top]>=h[j]){
ans=max(ans,stk[top]*(w[top]+cnt));
cnt+=w[top--];
}
stk[++top]=h[j];
w[top]=cnt+;
}
}
}
int main(){
while(scanf("%d%d",&n,&m)==){
memset(mp,,sizeof mp);
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
scanf("%d",&mp[i][j]); m++;//在最右边添一个全0列
for(int j=;j<=m;j++)
for(int i=;i<=n;i++)
if(mp[i][j]==)mp[i][j]=mp[i-][j]+; ans=;
for(int i=;i<=n;i++)
work(i);
printf("%d\n",ans);
}
}
51nod1158 最大子矩形 单调栈应用的更多相关文章
- hdu1506 直方图中最大的矩形 单调栈入门
hdu1506 直方图中最大的矩形 单调栈入门 直方图是由在公共基线对齐的矩形序列组成的多边形.矩形具有相同的宽度,但可能具有不同的高度.例如,左侧的数字显示了由高度为2,1,4,5,1,3,3的矩形 ...
- 51nod 1102 面积最大的矩形 (单调栈)
链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1102 思路: 首先介绍下单调栈的功能:利用单调栈,可以找到从左/ ...
- Leetcode84. 柱状图中最大的矩形(单调栈)
84. 柱状图中最大的矩形 前置 单调栈 做法 连续区间组成的矩形,是看最短的那一块,求出每一块左边第一个小于其高度的位置,右边也同理,此块作为最短限制.需要两次单调栈 单调栈维护递增区间,每次不满足 ...
- [51nod1102]面积最大的矩形(单调栈||预处理)
题意:求序列上某区间最小值乘区间长度的最大值. 解题关键:很早就在<挑战程序设计竞赛>中见过了,单调栈模板题,注意弹栈时如何处理后面的元素. 法一:单调栈 #include<bits ...
- 单调栈&单调队列学习笔记!
ummm,,,都是单调系列就都一起学了算了思想应该都差不多呢qwq 其实感觉这俩没有什么可说的鸭QAQ就是维护一个单调的东西,区别在于单调栈是一段进一段出然后单调队列是一段进另一段出?没了 好趴辣重点 ...
- XJOI 3606 最大子矩形面积/LightOJ 1083 Histogram(单调栈/笛卡尔树)
A histogram is a polygon composed of a sequence of rectangles aligned at a common base line. The rec ...
- 翻转长方形 (不知名oj中一道个人私题)--单调栈维护最大子矩形
怎么分析这道题呢? 首先 ,我们注意到一点: 不管怎么操作,任意一个2*2方格中的 "#"个数的奇偶性是不变的. 所以,如果一个2*2方格中有奇数个"#",这个 ...
- 单调栈(最大子矩形强化版)——牛客多校第八场A
求01矩阵里有多少个不同的1矩阵 首先预处理出pre[i][j]表示i上面连续的1个数,对每行的高度进行单调栈处理 栈里的元素维护两个值:pre[i][j]和向前延伸最多能维护的位置pos 然后算贡献 ...
- 经典单调栈最大子矩形——牛客多校第二场H
题目是求次大子矩形,那么在求最大子矩形的时候维护M1,M2即可 转移M2时比较的过程要注意一下 #include<bits/stdc++.h> using namespace std; # ...
随机推荐
- Spring 源码分析 spring-core 篇
先来看下 spring-core 的包结构 总共有6个模块,分别是 asm.cglib.core.lang.objenesis.util asm包: 用来操作字节码,动态生成类或者增强既有类的功能.主 ...
- 为何invalidate()不可以直接在UI线程中调用&invalidate与postInvalidate
1.android ui操作为什么一定要在主线程中执行? 答:Android UI操作是单线程模型,关于UI更新的相关API(包括invalidate())都是按照单线程设计的,对于多线程运行时不安全 ...
- vue 学习笔记—axios(替代vue-resource)
一.使用 1. 引入CDN的方式 https://unpkg.com/axios@0.16.2/dist/axios.min.js 或者 npm方式 npm install axios --sa ...
- ActiveMQ常见消息类型
JMS由下面三部分组成:消息头.属性.消息体.其中消息体定义了五种消息体格式,也可以称为消息类型. JMS规范中的消息类型包括TextMessage.MapMessage.ObjectMessage. ...
- aiojobs
import asyncio import aiojobs async def coro(timeout): print(timeout) await asyncio.sleep(timeout) p ...
- UrlDecode
void Decode(char *p){int i=0;while(*(p+i)){ if ((*p=*(p+i)) == '%') { *p=*(p+i+1) >= 'A' ? ((*(p+ ...
- c#基础之异常处理
在开发过程中,经常遇到各种各样的小问题,很多是由于基础不牢固,没有经常总结导致的.遇到重复的问题可能可根据以往经验处理,但是对问题本身引发的原因进行深入的了解.工作很多年,但是c#基础像一层冰一样,可 ...
- WebSocket参考
websocker是一种网页和服务端建立tcp全双工通信的技术,可以不再让页面进行向服务器发送轮询请求. 需要注意使用的场景,如果建立的tcp过多的话,会对服务器有很大压力. WebSocket前后台 ...
- C++ sizeof()练习
class A { int a; short b; int c; char d; }; class B { double a; short b; int c; char d; }; 在32位机器上用g ...
- python中__init__ ,__del__ &__new__
__new__ __new__方法是用来创建对象,__new__方法需要有一个返回值,这个返回值表示创建出来的对象的引用 __init__ __init__方法在类的一个对象被建立时 ,马上执行.__ ...