噢莫加纳加加加 • 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;
}
评论:
请先登录,才能进行评论