from typing import List, Optional, Dict, Set
class Solution:
def longest_alternating_peak_segment(self, nums: List[int]) -> int:
best = 0
n = len(nums)
dp = [[[0 for i in range(3)] for k in range(2)] for j in range(n)]
dp[0][0][0] = dp[0][1][0] = 1
for i in range(1, n):
dp[i][0][0] = dp[i][1][0] = 1
if nums[i] == nums[i-1]:
continue
if nums[i] < nums[i-1]:
sgn = 0
else:
sgn = 1
dp[i][sgn ^ 1][0] = 1
for start in range(3):
if start == 0:
dp[i][sgn][sgn + 1] = 2
else:
dp[i][sgn][start] = dp[i - 1][sgn ^ 1][start] + 1
for i in range(n):
best = max(best, dp[i][0][1])
best = max(best, dp[i][1][2])
if best <= 2:
best = 0
return best
ZnJvbSB0eXBpbmcgaW1wb3J0IExpc3QsIE9wdGlvbmFsLCBEaWN0LCBTZXQKCgpjbGFzcyBTb2x1dGlvbjoKICBkZWYgbG9uZ2VzdF9hbHRlcm5hdGluZ19wZWFrX3NlZ21lbnQoc2VsZiwgbnVtczogTGlzdFtpbnRdKSAtPiBpbnQ6CiAgICBiZXN0ID0gMAogICAgbiA9IGxlbihudW1zKQogICAgZHAgPSBbW1swIGZvciBpIGluIHJhbmdlKDMpXSBmb3IgayBpbiByYW5nZSgyKV0gZm9yIGogaW4gcmFuZ2UobildCiAgICBkcFswXVswXVswXSA9IGRwWzBdWzFdWzBdID0gMQogICAgZm9yIGkgaW4gcmFuZ2UoMSwgbik6CiAgICAgIGRwW2ldWzBdWzBdID0gZHBbaV1bMV1bMF0gPSAxCiAgICAgIGlmIG51bXNbaV0gPT0gbnVtc1tpLTFdOgogICAgICAgIGNvbnRpbnVlCiAgICAgIGlmIG51bXNbaV0gPCBudW1zW2ktMV06CiAgICAgICAgc2duID0gMAogICAgICBlbHNlOgogICAgICAgIHNnbiA9IDEKICAgICAgZHBbaV1bc2duIF4gMV1bMF0gPSAxCiAgICAgIGZvciBzdGFydCBpbiByYW5nZSgzKToKICAgICAgICBpZiBzdGFydCA9PSAwOgogICAgICAgICAgZHBbaV1bc2duXVtzZ24gKyAxXSA9IDIKICAgICAgICBlbHNlOgogICAgICAgICAgZHBbaV1bc2duXVtzdGFydF0gPSBkcFtpIC0gMV1bc2duIF4gMV1bc3RhcnRdICsgMQogICAgZm9yIGkgaW4gcmFuZ2Uobik6CiAgICAgIGJlc3QgPSBtYXgoYmVzdCwgZHBbaV1bMF1bMV0pCiAgICAgIGJlc3QgPSBtYXgoYmVzdCwgZHBbaV1bMV1bMl0pCiAgICBpZiBiZXN0IDw9IDI6CiAgICAgIGJlc3QgPSAwCiAgICByZXR1cm4gYmVzdA==