主要思想来自

http://blog.csdn.net/wuyanyi/article/details/7243580

题目的连接,头次提交的同学需要注册

http://acm.nyist.net/JudgeOnline/problem.php?pid=258

此题多年前出现在江湖之中,微软面试100题有,2014网易有道又冲出江湖,此题是单调栈的使用,想了两天,明白一点。得不断的思考啊

其实还是从最简单的(n2)优化而来。总的思路是:

1。每个矩形只出栈一次,入站一次。

2.出栈的时候表明该矩形不能往右边扩展了,所以可以出栈,同时在该矩形入站的时候我们已经计算了它右边的扩展的寛。

总而言之:入站记录了向右扩展

出栈记录了向左扩展

这个思路比较好理解,但是提交之后效率,确实低,但是很容易扩展到不同的,其实数组不用定义,直接输入就行,浪费了,其次是了long long 改为 int型,知识点有漏洞,就是计算机的不骂表示应该掌握,还有就是 Int float表示范围等,高精度,大数据值得联系。

#include<iostream>
#include<stack>
using namespace std; struct node
{
long long h;
long long w; }n[100006];
int main()
{
int len;
while(cin>>len&&len)
{
long long max=-1;//所求的答案
for(int i=0;i<len;i++)
{
cin>>n[i].h;
n[i].w=1;
}
stack<node> s; s.push(n[0]);
for(int i=1;i<len;i++)
{
if(n[i].h>=s.top().h) //如果当前节点的高大于栈顶,则加入
{ s.push(n[i]); }
else
{
long long sumw=0;
while(!s.empty()&&s.top().h>=n[i].h)
{ node n2=s.top();
s.pop();
sumw=sumw+n2.w ;
long long temp=sumw*n2.h;
if(temp>max)
{
max=temp;
} } n[i].w+=sumw;
s.push(n[i]); } } long long sumw=0;
while(!s.empty())
{
node n2=s.top();
s.pop();
sumw+=n2.w;
if(sumw*n2.h>max)
{
max=sumw*n2.h;
} } cout<<max<<endl; } return 0;
system("pause");
}

单调栈 二 nyOj 最大矩形和的更多相关文章

  1. 翻转长方形 (不知名oj中一道个人私题)--单调栈维护最大子矩形

    怎么分析这道题呢? 首先 ,我们注意到一点: 不管怎么操作,任意一个2*2方格中的 "#"个数的奇偶性是不变的. 所以,如果一个2*2方格中有奇数个"#",这个 ...

  2. 单调栈and单调队列(此文太多坑了,以后再填)

    单调栈 单调栈是一种特殊的栈,特殊之处在于栈内的元素都保持一个单调性,可能为单调递增,也可能为单调递减. 性质: 单调栈里的元素具有单调性 元素加入栈前,会在栈顶端把破坏栈单调性的元素都删除 使用单调 ...

  3. 2015 UESTC 数据结构专题G题 秋实大哥去打工 单调栈

    秋实大哥去打工 Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/contest/show/59 Descr ...

  4. 2018.10.30 一题 洛谷4660/bzoj1168 [BalticOI 2008]手套——思路!问题转化与抽象!+单调栈

    题目:https://www.luogu.org/problemnew/show/P4660 https://www.lydsy.com/JudgeOnline/problem.php?id=1168 ...

  5. 单调队列&单调栈归纳

    单调队列 求长度为M的区间内的最大(小)值 单调队列的基本操作,也就是经典的滑动窗口问题. 求长度为M的区间内最大值和最小值的最大差值 两个单调队列,求出长度为M的区间最大最小值的数组,分别求最大最小 ...

  6. 【leetcode】85. Maximal Rectangle(单调栈)

    Given a rows x cols binary matrix filled with 0's and 1's, find the largest rectangle containing onl ...

  7. XJOI 3606 最大子矩形面积/LightOJ 1083 Histogram(单调栈/笛卡尔树)

    A histogram is a polygon composed of a sequence of rectangles aligned at a common base line. The rec ...

  8. 51nod 1102 面积最大的矩形 (单调栈)

    链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1102 思路: 首先介绍下单调栈的功能:利用单调栈,可以找到从左/ ...

  9. [51nod1102]面积最大的矩形(单调栈||预处理)

    题意:求序列上某区间最小值乘区间长度的最大值. 解题关键:很早就在<挑战程序设计竞赛>中见过了,单调栈模板题,注意弹栈时如何处理后面的元素. 法一:单调栈 #include<bits ...

随机推荐

  1. UML用户指南--UML图简介

    本节和大家一起学习一下UML图,这里主要介绍UML结构图和UML行为图两部分,下面让我们一起看一下UML图的详细介绍吧. UML图 这里再次提到对软件体系结构进行可视化.详述.构造和文档化,有5种最重 ...

  2. pywinauto二次封装(pywinnat.py)

    将pywinauto常用方法进行封装,使得pywinauto用起来更简单 #头文件的引入 from pywinauto import application from pywinauto import ...

  3. js中的ajax的运用

    XMLHttpRequest对象 IE7+,FireFox,Chrome,Opera,Safari创建XHR对象: var xhr=new XMLHttpRequest(); 创建XHR对象的兼容性写 ...

  4. 解决WP8应用里ListBox绑定数据变多导致越来越卡

    ListBox控件绑定数据,当滑动到底部的时候加载数据到列表上,这样就会产生一个问题,当ListBox上面绑定的数据有几千条的时候,界面将会卡顿,我们可以通过在ListBox上只绑定指定数量的数据,其 ...

  5. delphi xe5 android sample 中的 SimpleList 是怎样绑定的

    C:\Users\Public\Documents\RAD Studio\12.0\Samples\FireMonkeyMobile 例子中的绑定方式如下图: 1.拖拽一个listview到界面上,然 ...

  6. EasyUI 关于IE使用window组件上传文件

    有时候IE会对使用window组件上传文件(第二次)不生效,解决方案是: 将该window每次打开的时候,使用: $('#adUploadWindow').window('refresh', 'pan ...

  7. 【无聊放个模板系列】HDU 1358 KMP

    #include<cstdio> #include<cstdlib> #include<cstring> #include<iostream> #inc ...

  8. Delphi REST和Cloud Services

    Paulo: What sort of MVC examples are you looking for? Daniele Teti has some great articles on buildi ...

  9. 170. Two Sum III - Data structure design

    题目: Design and implement a TwoSum class. It should support the following operations: add and find. a ...

  10. php 模拟斗地主发牌简单易懂

    闲来无聊,就写了这个方法,也算是熟悉下php的数组操作,还请各位大神多指教.$arr 数组,好像有点问题,应该 2=>'方片2',3=>'梅花2',4=>'红心2',5=>'黑 ...