hdu 1506 单调栈求面积
来源:互联网 发布:怎么在淘宝卖二手货 编辑:程序博客网 时间:2024/04/30 13:21
点击打开链接
求出 高度h[i]向左和向右最远能扩展到的下标
即利用单调栈 求出h[i]向左(右)最后一个不小于h[i]的下标
则以h[i]为高的面积为 h[i]*(R[i]-L[i]+1)
#include <iostream>#include <cstring>#include <cstdio>#include <stack>#include <algorithm>using namespace std;const int N=1e6+20;typedef long long ll;ll h[N];int L[N],R[N];//L[i] 高度h[i]向左最远能扩展到的下标 //则以h[i]为高的面积为 h[i]*(R[i]-L[i]+1) int main(){int n;while(cin>>n&&n){stack <int> s;//单调栈 保存下标 for(int i=1;i<=n;i++){scanf("%lld",&h[i]);while(!s.empty()&&h[s.top()]>h[i]){R[s.top()]=i-1;//(i-1):h[s.top()]向右最后一个不小于于它的下标 s.pop();}s.push(i);}while(!s.empty()){R[s.top()]=n;s.pop();}for(int i=n;i>=1;i--){while(!s.empty()&&h[i]<h[s.top()]){L[s.top()]=i+1;s.pop();}s.push(i);}while(!s.empty()){L[s.top()]=1;s.pop();}ll ans=0;for(int i=1;i<=n;i++){ll res=(R[i]-L[i]+1)*h[i];ans=max(res,ans);}cout<<ans<<endl;}return 0;}
0 0
- hdu 1506 单调栈求面积
- [HDU 1506] 单调栈求最大矩形
- HDU 1506 Largest Rectangle in a Histogram(最大矩形面积、单调栈)
- HDU 1505 City Game (单调栈+最大子矩阵面积)
- HDU 1506 单调栈
- HDU 1506【单调栈】
- POJ 2559 &&HDU 1506 Largest Rectangle in a Histogram && 51nod 1102 面积最大的矩形 单调栈的应用
- poj 2559 Largest Rectangle in a Histogram 求面积最大的矩形(单调栈)
- HDU 2036 求多边形面积
- HDU 2036 求多边形面积
- HDU(2036) 求多边形面积
- hdu 2036 求多边形面积
- HDU 2306 求多边形面积
- HDU 1506-单调栈-DP
- 【DP求最大子矩阵面积】hdu 1506
- HDU 1505 1506 2830 2870求最大矩阵面积 DP
- 单调队列 POJ 2823+单调栈 HDU 1506
- 单调队列 POJ 2823+单调栈 HDU 1506
- (转)Websocket是啥子协议?
- wudimei php添加了按需要加载文件的机制
- gzip,zip,bzip2 文件压缩和归档
- 4.less
- Java反射的作用
- hdu 1506 单调栈求面积
- HyperspectralData Exploitation Theory and Applications教程简介
- Java的四种修饰符的访问权限
- AS使用svn提交代码总结
- Java代码去除svn标志
- iOS中Emoji表情的判断
- 面试问题
- 仿美团外卖添加商品抛物线动画
- Android__小功能__防止重复点击