- 思路1:暴力,计算sum*min 50%
- 思路2:中心扩展法,把当前作为区间最小值,向两边扩展区间 100% 1400+ ms
- 思路3:由于数据范围从0-100,分别找出0-100每个数对应的最大和区间(见讨论区大佬),类似查表法
- 思路4:单调栈(最佳思路)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader buff = new BufferedReader(new InputStreamReader(System.in));
buff.readLine();
int[] in = Arrays.stream(buff.readLine().split(" ")).parallel().mapToInt(Integer::parseInt).toArray();
int res = 0;
//中心扩展法
for(int i = 0; i < in.length; i++){
int p = i, q = i - 1;
int sum = 0;
while (p<in.length && in[p]>=in[i]) {
sum += in[p];
p++;
}
while (q >= 0 && in[q]>=in[i]) {
sum += in[q];
q--;
}
res = Math.max(res, sum * in[i]);
}
System.out.println(res);
}
}