#include<iostream>
#include<stdlib.h>
#include<vector>
using namespace std;
int main() {
/*
初始化输入数据
*/
int num,tmp;
vector<int> targ;
cin >> num;
for (int i = 0; i < num; ++i) {
cin >> tmp;
targ.push_back(tmp);
}
/*
进行数据处理
*/
int max_sq = 0, centH = 0;//max_sq存储当前最大的面积,centH存储中间需要变换的高
for (int i = 0; i < targ.size();++i) {
centH = targ.at(i);
for (int j = i; j < targ.size(); ++j) {
if (centH > targ.at(j)) {
centH = targ.at(j);
}
int s = (j - i + 1)*centH;
max_sq = s > max_sq ? s : max_sq;
}
}
cout << max_sq;
return 0;
}
其实这道题可以使用单调栈来做:
如果栈为空,则直接将元素值入栈
否则,如果栈顶元素大于等于待入栈元素,则直接入栈,否则,如果小于则开始出栈
出栈时,根据出栈的值和栈中元素的个数可以求的形成的面积,待栈为空时,将刚刚的元素入栈,继续遍历,直到没有元素位置,如果栈不为空,同样,按照之前的出栈规则出栈
过程中统计最大值即可得到答案!
代码晚点更新!!