单调栈结构的典型应用,代码如下:
//
// Created by jt on 2020/9/2.
//
#include <vector>
#include <iostream>
#include <stack>
using namespace std;
int monotoneStack(vector<int> &vec);
int main() {
int n;
cin >> n;
vector<int> vec;
for (int i = 0; i < n; ++i) { int a; cin >> a; vec.push_back(a); }
cout << monotoneStack(vec) << endl;
}
int monotoneStack(vector<int> &vec) {
vec.push_back(0);
int maxVal = 0;
stack<int> st;
for (int i = 0; i < vec.size(); ++i) {
while(!st.empty() && vec[i] < vec[st.top()]) {
int height = vec[st.top()];
st.pop();
int left = st.empty() ? -1 : st.top();
int width = i - (left+1);
maxVal = max(maxVal, height * width);
}
st.push(i);
}
return maxVal;
}
京公网安备 11010502036488号