#include <iostream> #include <stack> using namespace std; int main() { stack<int> value; stack<int> index; int n, v, max=0, count=0; cin >> n; for (int i=0; i<=n; i++) { if (i<n) cin >> v; else // 多跑一次,讓最後一次的長度設為0,把剩下所有面積都算過一次 v = 0; if (value.empty()) { // 如果是第一次輸入就跑stack.top()會壞掉 value.push(v); index.push(i); continue; } while (v < value.top()) { if (value.top() * ( i-index.top() ) > max) // 面積 max = value.top() * ( i-index.top() ); // 把前一個清掉,並計算總共清掉幾個 value.pop(); index.pop(); count++; if (value.empty()) break; } for (int j=i-1; j>=i-count; j--) { // 把pop出來的重新放回去,並更改為最低高度 value.push(v); index.push(j); } count=0; value.push(v); index.push(i); } cout << max << endl; }