Problem:
Problem B: Mountain Climbing

Problem

なりよし君は山登りの計画を立てています。計画はとても大切です。高原・盆地が多いのか、峰・窪地が多いのか、山腹があるのか、状況によって用意する荷物も変わってきます。

なりよし君が持っている登山ガイドブックには、今回登山に利用する道の一定の距離毎の標高がスタート地点からゴール地点まで順に書かれています。

ガイドブックに書かれている標高をスタート地点からゴール地点まで順に
a1, a2, a3, ..., aNとし、高原、盆地、山腹、峰、窪地を次のように定義します:

高原

ai-1 < ai = ai+1 = ... = aj > aj+1 (1 < i < j < N)

盆地

ai-1 > ai = ai+1 = ... = aj < aj+1 (1 < i < j < N)

山腹

ai-1 < ai = ai+1 = ... = aj < aj+1 (1 < i < j < N)

もしくは
ai-1 > ai = ai+1 = ... = aj > aj+1 (1 < i < j < N)

峰

ai-1 < ai > ai+1 (1 < i < N)

窪地

ai-1 > ai < ai+1 (1 < i < N)

高原

盆地

山腹

山腹

峰

窪地

あなたは、なりよし君の為に、高原・盆地・山腹・峰・窪地、それぞれの数を計算するプログラムを書くことにしました。

Input

入力は次のような形式で与えられる:

N a1 a2 a3...aN

Nは与えられる標高の数を表す整数である。
aiは標高を表す整数である( 1 ≤ i ≤ N )。それぞれ空白区切りで与えられる。

Constraints

入力は以下の条件を満たす。

1 ≤ N ≤ 100000

-100000 ≤ ai ≤ 100000

Output

高原の数、盆地の数、山腹、峰、窪地の数を順番に空白区切りで一行に出力せよ。

Sample Input 1

5 1 2 3 4 3

Sample Output 1

0 0 0 1 0

Sample Input 2

12 10 5 15 15 20 20 12 12 8 3 3 5

Sample Output 2

1 1 2 0 1

Solution in JAVA (judge verdict: Accepted)

import java.io.*;
import java.util.*;


/**
 * AIZU ONLINE JUDGE
 * 1552
 *  2020/5/10
 */
public class Main {

    PrintStream log = new PrintStream(new OutputStream() { public void write(int b) {} } );
    PrintStream result = System.out;
    Scanner sc = new Scanner(System.in);

    void main() throws IOException {

        int N = sc.nextInt();

        int 高原 = 0;
        int 盆地 = 0;
        int 山腹 = 0;
        int 峰 = 0;
        int 窪地 = 0;
        int[] a = new int[N];
        for(int i = 0; i < N; i++) {
            a[i] = sc.nextInt();
        }
        for(int i = 1; i < N; i++) {
            if (a[i - 1] == a[i])
                continue;
            int k;
            for(k = i; k < N - 1; k++) {
                if (a[k] != a[k + 1]) {
                    break;
                }
            }
            if (k < N - 1) {
                if (a[i - 1] > a[i] && a[k] > a[k + 1]) {
                    if (i < k) {
                        山腹++;
                    }
                }
                if (a[i - 1] < a[i] && a[k] < a[k + 1]) {
                    if (i < k) {
                        山腹++;
                    }
                }
                if (a[i - 1] > a[i] && a[k] < a[k + 1]) {
                    if (i < k) {
                        盆地++;
                    }
                    else {
                        窪地++;
                    }
                }
                if (a[i - 1] < a[i] && a[k] > a[k + 1]) {
                    if (i < k) {
                        高原++;
                    }
                    else {
                        峰++;
                    }
                }
            }
        }

        result.println(高原 + " " + 盆地 + " " + 山腹 + " " + 峰 + " " + 窪地);
    }


    public static void main(String[] args) throws IOException {
        new Main().main();
    }


}