最大子矩形(单调栈)

直方图求最大子矩形,单调栈最简单的应用

 1 #include<iostream>
 2 #include<stack>
 3 using namespace std;
 4 int solve(int n,int *height)
 5 {
 6     int ans=0;
 7     stack<int>mystack;
 8     mystack.push(0);
 9     for(int i=1;i<=n+1;i++){
10         while(height[mystack.top()]>height[i])
11         {
12             int nowheight=height[mystack.top()];
13             mystack.pop();
14             ans=max(ans,nowheight*(i-mystack.top()-1));
15         }
16         mystack.push(i);
17     }
18     return ans;
19 }
20 int main()
21 {
22     int height[60000];
23     int n;
24     cin>>n;
25     for(int i=1;i<=n;i++) cin>>height[i];
26     cout<<solve(n,height)<<endl;
27     return 0;
28 }

 

posted @ 2018-03-30 22:20  ghblw  阅读(152)  评论(0)    收藏  举报