78 分糖果问题进阶问题
Table of Contents

ac

1. 每个孩子不管得分多少,起码分到一个糖果。
2. 任意两个相邻的孩子之间,得分较多的孩子必须拿多一些糖果。
3. 任意两个相邻的孩子之间的得分如果一样多,糖果数必须相同
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Scanner;


public class Main {
    public static Scanner sc = new Scanner(System.in);

    public static BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

    public static void main(String[] args) throws Exception {
        int n = sc.nextInt();
        int[] arr = new int[n];
        for(int i=0;i<n;i++){
            arr[i] = sc.nextInt();
        }
        int[] help = new int[n];
        Arrays.fill(help,1);

        // -> 右边大,则必须比左边多1个,相等则必须相等
        for(int i=1;i<n;i++){
            if(arr[i] > arr[i-1] && help[i] <= help[i-1]){
                help[i] = help[i-1] + 1;
            }
            if(arr[i] == arr[i-1]){
                help[i] = help[i-1];
            }
        }
        // <- 左边大,则必须比右边多1个,相等则必须相等
        for(int i=n-2;i>=0;i--){
            if(arr[i] > arr[i+1] && help[i] <= help[i+1]){
                help[i] = Math.max(help[i+1] + 1, help[i]);
            }
            if(arr[i] == arr[i+1]){
                help[i] = help[i+1];
            }
        }
        int sum = 0;
        for(int i=0;i<n;i++){
            sum += help[i];
        }
        System.out.println(sum);
    }

}
/*
13
0 1 2 3 3 3 2 2 2 2 2 1 1

30

1 2 3 4 4 4 2 2 2 2 2 1 1
 */