可能是算法问题
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e6+10;
int sum[maxn<<2],a[maxn],sum1[maxn<<2];
int n;
int read() {
int x=0,f=1;
char ch=getchar();
while(ch<'0' || ch>'9') {
if(ch=='-') {
f=-1;
}
ch=getchar();
}
while(ch>='0' && ch<='9') {
x=(x<<3)+(x<<1)+ch-'0';
ch=getchar();
}
return x*f;
}
int ls(int rt) {
return rt << 1;
}
int rs(int rt) {
return rt << 1 | 1;
}
void pushUp(int rt) {
sum[rt] = sum[ls(rt)]+sum[rs(rt)];
sum1[rt] = min(sum1[ls(rt)],sum1[rs(rt)]);
}
void build(int rt,int l,int r) {
if(l == r) {
sum1[rt] = sum[rt] = a[l];
return;
}
int mid = (l+r)>>1;
build(ls(rt),l,mid);
build(rs(rt),mid+1,r);
pushUp(rt);
}
int ask(int rt,int l,int r,int L,int R) {
if(L <= l && r <= R) {
return sum[rt];
}
pushUp(rt);
int mid = (l+r) >> 1;
int res = 0;
if(L <= mid) {
res += ask(ls(rt),l,mid,L,R);
}
if(R > mid) {
res += ask(rs(rt),mid+1,r,L,R);
}
return res;
}
int ask1(int rt,int l,int r,int L,int R) {
if(L <= l && r <= R) {
return sum1[rt];
}
pushUp(rt);
int mid = (l+r) >> 1;
int res = 1e9;
if(L <= mid) {
res = min(res,ask1(ls(rt),l,mid,L,R));
}
if(R > mid) {
res = min(res,ask1(rs(rt),mid+1,r,L,R));
}
return res;
}
int main() {
// freopen("feel.in","r",stdin);
// freopen("feel.out","w",stdout);
n = read();
for(int i = 1; i <= n; ++i) {
a[i] = read();
}
build(1,1,n);
int Max = -2e9;
for(int i = 1; i <= n; ++i) {
for(int j = i; j <= n; ++j) {
Max = max(Max,ask1(1,1,n,i,j) * ask(1,1,n,i,j));
}
}
printf("%d",Max);
return 0;
}