-
E - Largest Rectangle in a Histogram
- POJ - 2559
- 维护一个非递增单调栈,对于每个矩形,我们求出它向左向右分别能延伸的长度,然后乘以它的高度。
- 这就是以当前矩形为最低高度可以得到的最大的面积。只需要求个最大值即可。
- 总结性的来说就是:给定一序列,寻找某一子序列,使得子序列中的最小值乘以子序列的长度最大。
- 这是单调栈的一种应用。——jh说的对
-
#include<iostream> #include<stdio.h> #include<stack> using namespace std; #define ll long long struct node { ll data,id; } cur; ll ans,n; ll MAX(ll a,ll b) { return a>b?a:b; } int main() { while(scanf("%lld",&n)) { if(n==0)break; ans=0; stack<node>stk; for(int i=0; i<n; i++) { cur.id=i; scanf("%lld",&cur.data); if(stk.empty()) stk.push(cur); else { while(!stk.empty()&&stk.top().data>cur.data) { ans=MAX(ans,(i-stk.top().id)*stk.top().data); cur.id=stk.top().id; stk.pop(); } stk.push(cur); } } while(!stk.empty()) { ans=MAX(ans,(n-stk.top().id)*stk.top().data); cur.id=stk.top().id; stk.pop(); } printf("%lld\n",ans); } return 0; }
E - Largest Rectangle in a Histogram POJ - 2559 -单调栈第二弹
猜你喜欢
转载自blog.csdn.net/BePosit/article/details/84636480
今日推荐
周排行