class Solution(object):
def maxSumTwoNoOverlap(self, A, L, M):
"""
:type A: List[int]
:type L: int
:type M: int
:rtype: int
"""
Lmap, Rmap = dict(), dict()
num = 0
for i in range(len(A) - L + 1):
if i == 0:
Lmap[i] = sum(A[:L])
else:
Lmap[i] = Lmap[i-1] - A[i-1] + A[i+L-1]
for i in range(len(A) - M + 1):
if i == 0:
Rmap[i] = sum(A[:M])
else:
Rmap[i] = Rmap[i-1] - A[i-1] + A[i+M-1]
for i in range(len(A) - L + 1 ):
for j in range(len(A) - M + 1):
if i+L-1 < j or j+M-1 < i:
num = max(num, Lmap[i] + Rmap[j])
return num