列を数える


Question
質問リンク
Silver 4
Logic
デフォルト構造:dp
1.dpリストに4つの数字を配置します.
  • a.連続増加現在値
  • b.連続増加の最大値
  • c.連続下降の現在値
  • d.連続的に減少した最大値
  • の数字ごとに前の数字と比較します(最初の数字は同じ数字です).
    3-1. 前の数より大きい:a増加、b値更新、c初期化(1)
    3-2. 同じ場合:a、cインクリメント、b、d値が最新
    3-3. 小:a初期化、c増加、d値最新
  • Code
    from gettext import dpgettext
    from sys import stdin
    N = int(stdin.readline().rstrip())
    data = list(map(int,stdin.readline().rstrip().split()))
    dp=[0,0,0,0]
    prev = data[0]
    for s in data:
        if prev < s: 
            dp[0] += 1
            dp[1] = max(dp[1],dp[0])
            dp[2] = 1
        elif prev == s:
            dp[0] += 1
            dp[1] = max(dp[1],dp[0])
            dp[2] += 1
            dp[3] = max(dp[3],dp[2])
        else : 
            dp[0] = 1
            dp[2] += 1
            dp[3] = max(dp[3],dp[2])
        prev=s
    print(max(dp[1],dp[3]))