最大子矩形(单调栈)
直方图求最大子矩形,单调栈最简单的应用
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 }

浙公网安备 33010602011771号