Leetcode 943 Solution

This article provides solution to leetcode question 943 (sum-of-subarray-minimums)

https://leetcode.com/problems/sum-of-subarray-minimums

Solution

class Solution(object):
    def sumSubarrayMins(self, A):
        """
        :type A: List[int]
        :rtype: int
        """
        s = []
        sum_min = 0
        ans = 0

        for i, a in enumerate(A):
            j = i
            while s and s[-1][0] > a:
                sum_min -= (j - s[-1][1]) * s[-1][0]
                j = s[-1][1]
                s.pop()

            sum_min += (i - j + 1) * a
            s.append((a, j))

            ans += sum_min

        return ans % (10**9 + 7)