思想均在注释中写好。代码参考自点击打开链接
#include<iostream>
#include<stdlib.h>
using namespace std;
int *a;
int main(){
int n;//表示矩形数量
while(cin>>n){
a = (int *)malloc(n*sizeof(int));
for(int i = 0; i < n; i++){
cin>>a[i];
}
int ans = -1;//表示最终结果
//矩形左边的边固定在i的
for(int i = 0; i < n; i++){
//矩形当前最小上边为a[i]
int low = a[i];
//位置右边的边移动,随着右边的边移动矩形进行调整
//可遍历以i为左边的所有可能矩形
for(int j = i; j < n; j++){
//如果新包进来的部分上边比当前举行的上边小则调整矩形上边
if(a[j] < low){
low = a[j];
}
//计算新矩形的面积
int area = (j - i + 1)*low;
//如果新矩形面积更大
if(ans < area){
ans = area;
}
}
}
cout<<ans<<endl;
}
return 0;
}