Dashboard Temp Share Shortlinks Frames API

HTMLify

sum-of-subarray-ranges.py
Views: 29 | Author: prakhardoneria
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
class Solution:
    def subarrayRanges(self, arr):
        n = len(arr)
        
        def get_contribution(is_min):
            res = 0
            stack = []
            for i in range(n + 1):
                while stack and (i == n or (arr[stack[-1]] > arr[i] if is_min else arr[stack[-1]] < arr[i])):
                    mid = stack.pop()
                    left = stack[-1] if stack else -1
                    right = i
                    res += arr[mid] * (mid - left) * (right - mid)
                stack.append(i)
            return res

        return get_contribution(False) - get_contribution(True)