单调栈 二 nyOj 最大矩形和
主要思想来自
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 最大矩形和的更多相关文章
- 翻转长方形 (不知名oj中一道个人私题)--单调栈维护最大子矩形
怎么分析这道题呢? 首先 ,我们注意到一点: 不管怎么操作,任意一个2*2方格中的 "#"个数的奇偶性是不变的. 所以,如果一个2*2方格中有奇数个"#",这个 ...
- 单调栈and单调队列(此文太多坑了,以后再填)
单调栈 单调栈是一种特殊的栈,特殊之处在于栈内的元素都保持一个单调性,可能为单调递增,也可能为单调递减. 性质: 单调栈里的元素具有单调性 元素加入栈前,会在栈顶端把破坏栈单调性的元素都删除 使用单调 ...
- 2015 UESTC 数据结构专题G题 秋实大哥去打工 单调栈
秋实大哥去打工 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/contest/show/59 Descr ...
- 2018.10.30 一题 洛谷4660/bzoj1168 [BalticOI 2008]手套——思路!问题转化与抽象!+单调栈
题目:https://www.luogu.org/problemnew/show/P4660 https://www.lydsy.com/JudgeOnline/problem.php?id=1168 ...
- 单调队列&单调栈归纳
单调队列 求长度为M的区间内的最大(小)值 单调队列的基本操作,也就是经典的滑动窗口问题. 求长度为M的区间内最大值和最小值的最大差值 两个单调队列,求出长度为M的区间最大最小值的数组,分别求最大最小 ...
- 【leetcode】85. Maximal Rectangle(单调栈)
Given a rows x cols binary matrix filled with 0's and 1's, find the largest rectangle containing onl ...
- XJOI 3606 最大子矩形面积/LightOJ 1083 Histogram(单调栈/笛卡尔树)
A histogram is a polygon composed of a sequence of rectangles aligned at a common base line. The rec ...
- 51nod 1102 面积最大的矩形 (单调栈)
链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1102 思路: 首先介绍下单调栈的功能:利用单调栈,可以找到从左/ ...
- [51nod1102]面积最大的矩形(单调栈||预处理)
题意:求序列上某区间最小值乘区间长度的最大值. 解题关键:很早就在<挑战程序设计竞赛>中见过了,单调栈模板题,注意弹栈时如何处理后面的元素. 法一:单调栈 #include<bits ...
随机推荐
- 【python】坑,坑,折腾一个下午python 3.5中 ImportError: No module named BeautifulSoup
将语句 from bs4 import BeautifulSoup4 改成 from bs4 import BeautifulSoup 通过 尼玛------------------------! 总 ...
- about building flying sauser
download flying sauser: unzip flyingsaucer-master.zip cd flyingsaucer-master/ mvn install
- 对于python WSGI的理解
首先看看WSGI的目的是什么? 是用来定义一个统一的接口. 这个接口是针对Web服务器和python Web应用之间的. 以增加Python web应用在不同Web 服务器之间的可移植性. 也就是说如 ...
- UIWebView与JS的深度交互-b
要实现这样一个需求:按照本地的CSS文件展示一串网络获取的带HTML格式的只有body部分的文本,需要自己拼写完整的 HTML.除此之外,还需要禁用获取的HTML文本中自带的 < img > ...
- 如何用JavaScript在浏览器端获取图片的原始尺寸大小?
var img = $("#img_id"); // Get my img elem var pic_real_width, pic_real_height; $("&l ...
- Spring MVC使用commons fileupload实现文件上传功能
通过Maven建立Spring MVC项目,引入了Spring相关jar依赖. 1.为了使用commons fileupload组件,需要在pom.xml中添加依赖: <properties&g ...
- easyui源码翻译1.32--Combo(自定义下拉框)
前言 扩展自$.fn.validatebox.defaults.使用$.fn.combo.defaults重写默认值对象.下载该插件翻译源码 自定义下拉框显示一个可编辑的文本框和下拉面板在html页面 ...
- easyui源码翻译1.32--TimeSpinner(时间微调)
前言 扩展自$.fn.spinner.defaults.使用$.fn.timespinner.defaults重写默认值对象.下载该插件翻译源码 时间微调组件的创建基于微调组件.它和数字微调类似,但是 ...
- Android 关于HttpClient上传中文乱码的解决办法
使用过HttpClient的人都知道可以通过addTextBody方法来添加要上传的文本信息,但是,如果要上传中文的话,或还有中文名称的文件会出现乱码的问题,解决办法其实很简单: 第一步:设置Mult ...
- 使用Sqoop从mysql向hdfs或者hive导入数据时出现的一些错误
1.原表没有设置主键,出现错误提示: ERROR tool.ImportTool: Error during import: No primary key could be found for tab ...