from math import inf
class Solution:
def maxSumTrionic(self, nums: List[int]) -> int:
n = len(nums)
prefixSum = [0]*n
s = 0
for i,v in enumerate(nums):
s += v
prefixSum[i] = s
def query(l,r):
return prefixSum[r] - (prefixSum[l-1] if l>0 else 0)
increasing = [-1]*n
incRight = [-1]*n
decRight = [-1]*n
for i in range(1,n):
if nums[i] > nums[i-1]:
increasing[i] = increasing[i-1] if increasing[i-1] != -1 else i-1
if i - increasing[i] == 2 and nums[increasing[i]] < 0:
increasing[i] += 1
for i in range(n-2,-1,-1):
if nums[i] > nums[i+1]:
decRight[i] = decRight[i+1] if decRight[i+1] != -1 else i+1
if nums[i] < nums[i+1]:
incRight[i] = incRight[i+1] if incRight[i+1] != -1 else i+1
ans = -inf
for p in range(1,n-2):
l = increasing[p]
if l == -1: continue
q = decRight[p]
if q == -1: continue
r = incRight[q]
if r == -1: continue
if query(q, q+1) > query(q, r):
r = q+1
ans = max(ans, query(l, r))
return ans