AC

噢莫加纳加加加  •  2天前


#include <iostream>
#include <stack>
using namespace std;
stack<int> s1, s2;
int a[100001];
int l[100001], r[100001];
int main() { 
	int n  ;
	cin >> n;
	for (int i = 1; i <= n; i++) cin >> a[i];
	for (int i = 1; i <= n; i++) {
		while (!s1.empty() && a[s1.top()] >= a[i]) s1.pop();
		if (s1.empty()) l[i] = 1;
		else l[i] = s1.top()+1;
		s1.push(i);
	}
	for (int i = n; i >= 1; i--) {
		while (!s2.empty() && a[s2.top()] >= a[i]) s2.pop();
		if (s2.empty()) r[i] = n;
		else r[i] = s2.top()-1;
		s2.push(i);
	}
	int ans = 0;
	for (int i = 1; i <= n; i++) {
		ans = max(ans, (r[i] - l[i] + 1) * a[i]);
	}
	cout << ans;
	return 0;
}

评论:

请先登录,才能进行评论