#include <bits/stdc++.h>
using namespace std;
#define int long long
const int MAXN = 1e6 + 50;
int n,A[MAXN],B[MAXN],ML[MAXN],MR[MAXN],now = 0;
priority_queue <int> q ;
struct S {
int id,data;
} N[MAXN];
inline int read() {
int x = 0 , flag = 1;
char ch = getchar() ;
for( ; ch > '9' || ch < '0' ; ch = getchar()) if(ch == '-') flag = -1;
for( ; ch >= '0' && ch <= '9' ; ch = getchar()) x = (x << 3) + (x << 1) + ch - '0';
return x * flag;
}
bool cmp(S a1 , S a2) {
return a1.data > a2.data;
}
signed main() {
n = read();
for(int i = 1 ; i <= n ; i ++) A[i] = read() , N[i].id = i , N[i].data = A[i];
sort(N + 1 , N + 1 + n , cmp);
int Ans = -0x3f;
q.push(0);
for(int i = 1 ; i <= n ; i ++) {
Ans = max(Ans , N[i].data * N[i].id);
Ans = max((q.top() + N[i].id) * N[i].data , Ans);
q.push(N[i].id);
}
cout << Ans;
return 0;
}
RT,上面的优先队列做法是正确的吗?