• 思路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);
    }
}