
유의할 테스트 케이스
2
0 1
3
0 1 0
#include <algorithm>
#include <vector>
#include <iostream>
using namespace std;
typedef long long ll;
int n;
vector<ll> vec;
ll maxAns = -1;
void histogram(int start, int end) {
	if (start > end) return;
	if (start == end) {
		maxAns = max(maxAns, vec[start]);
	}
	if (start + 1 == end) {
		maxAns = max(maxAns, vec[start]);
		maxAns = max(maxAns, vec[end]);
		maxAns = max(maxAns, min(vec[start], vec[end]) * 2);
	}
	int mid = (start + end) / 2;
	
	//vec[mid]를 포함하지 않는 직사각형의 넓이 
	histogram(start, mid-1);
	histogram(mid + 1, end);
	//vec[mid]를 포함하는 직사각형의 넓이 
	maxAns = max(maxAns, vec[mid]);
	ll height = vec[mid];
	ll width = 1;
	int left = mid - 1;
	int right = mid + 1;
	while ((start <= left) || (right <= end)) {
		//두 방향 모두 확장 가능
		if ((start <= left) && (right <= end)) {
			if (min(height, vec[left]) > min(height, vec[right])) {
				height = min(height, vec[left]);
				left--; 
			}
			else {
				height = min(height, vec[right]);
				right++; 
			}
		}
		//왼쪽으로만 확장 가능
		else if (start <= left) {
			height = min(height, vec[left]);
			left--; 
		}
		//오른쪽으로만 확장 가능
		else {
			height = min(height, vec[right]);
			right++; 
		}
		
		width++;
		maxAns = max(maxAns, height * width);
	}
	return;
}
int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(NULL); cout.tie(NULL);
	cin >> n;
	for (int i = 0; i < n; ++i) {
		ll input;
		cin >> input;
		vec.push_back(input);
	}
	histogram(0, n - 1);
	cout << maxAns;
	return 0;
}