poj 2559 Largest Rectangle in a Histogram 求面积最大的矩形(单调栈)
来源:互联网 发布:淘宝限购在哪里设置 编辑:程序博客网 时间:2024/05/02 00:48
Largest Rectangle in a Histogram
题目大意
给出一个数N代表有多少个矩形,然后下面有N个数代表每个矩形的高度,宽度均为1。最后求这N个矩形组成的最大面积!
解题思路
很容易想到的就是使用单调栈。维护一个从栈顶到栈低减小的栈!
每次遇到栈顶的元素大于要压入的元素就要,出栈然后和当前的最大面积取最大值,这样一直下去,最后栈中就剩下一个从栈顶到栈低减小的栈。最后变为的栈就像下面这个图一样!
AC代码
我看的poj的discuss里面不让用long long和lld,事实证明是错。我就是用这个过的!
#include<cstdio>#include<stack>#include<algorithm>#include<iostream>using namespace std;typedef long long LL;typedef pair<LL,LL> PII;const int MX = 100000 + 5;int main(){ int N; int height; while(~scanf("%d",&N) &&N) { stack<PII>Q; LL ans = 0; for(int i=0;i<N;i++) { scanf("%d",&height); LL width = 0; while(!Q.empty() && Q.top().first>=height ){ //当栈顶元素大于当前元素 LL tmpH = Q.top().first; LL tmpW = Q.top().second; Q.pop();width+=tmpW;//每次出栈的时候,就是计算以这个矩形的高度为最长高度的最大面积, //因为左边的比他小,所以只需要向右延伸就可以了 //所以每次出栈的时候,就是出栈后的栈顶元素宽度+1 ans = max(ans,tmpH*width);//如果大于当前的最大面积就更新 } Q.push(make_pair((LL)height,(LL)width+1)); } int tmp = 0; while(!Q.empty()){ ans = max(ans,Q.top().first*(tmp+Q.top().second));//原理和上面一样 tmp+=Q.top().second;Q.pop(); } printf("%lld\n",ans); } return 0;}
0 0
- poj 2559 Largest Rectangle in a Histogram 求面积最大的矩形(单调栈)
- POJ 2559 Largest Rectangle in a Histogram(单调栈维护最大矩形面积)
- POJ 2559 &&HDU 1506 Largest Rectangle in a Histogram && 51nod 1102 面积最大的矩形 单调栈的应用
- HDU 1506 Largest Rectangle in a Histogram(最大矩形面积、单调栈)
- HDU 1056 Largest Rectangle in a Histogram(dp)(求最大的矩形面积)
- POJ 2559 Largest Rectangle in a Histogram (DP最大矩形面积)
- Poj 2559 Largest Rectangle in a Histogram(柱形统计图中的最大矩形面积)
- POJ 2559 -- Largest Rectangle in a Histogram ( 单调栈 )
- 【单调栈】POJ-2559 Largest Rectangle in a Histogram
- POJ 2559 Largest Rectangle in a Histogram(单调栈)
- POJ 2559 Largest Rectangle in a Histogram RMQ || 单调栈
- POJ 2559 Largest Rectangle in a Histogram(单调栈)
- POJ - 2559 Largest Rectangle in a Histogram 单调栈
- 【单调栈】POJ 2559 Largest Rectangle in a Histogram
- POJ 2559 Largest Rectangle in a Histogram(单调栈)
- POJ-2559-Largest Rectangle in a Histogram-单调栈
- 【POJ 2559】Largest Rectangle in a Histogram(单调栈)
- poj 2559 Largest Rectangle in a Histogram(单调栈)
- Android--MVP架构设计Listview
- 二叉树的遍历算法(递归和非递归)
- 内存溢出问题
- mysql的3种分表方案
- Build aosp for Nexus
- poj 2559 Largest Rectangle in a Histogram 求面积最大的矩形(单调栈)
- PING++微信支付问题小结
- Ubuntu,kubuntu与xubuntu的差别 Ubuntu各版本主要差异
- MySQL隐式转化整理
- idea 14提示override错误
- LintCode:克隆二叉树
- Java的初始化顺序
- 坚持#第25天~aditplus更熟悉了
- JVM GC中Stop the world案例实战