给定一个整数数组 A,找到 min(B) 的总和,其中 B 的范围为 A 的每个(连续)子数组。

由于答案可能很大,因此返回答案模 0^9 + 7

示例:

输入:[3,1,2,4]
输出:17
解释:
子数组为 [3],[1],[2],[4],[3,1],[1,2],[2,4],[3,1,2],[1,2,4],[3,1,2,4]。 
最小值为 3,1,2,4,1,1,2,1,1,1,和为 17。

提示:

1 <= A <= 30000
1 <= A[i] <= 30000
# 并没有通过(TLE),能力有限想不到其它办法了
# @param {Integer[]} a
# @return {Integer}
def sum_subarray_mins(a)
  res_arr = Array.new
  a.each_with_index do |_, index|
    tmp_arr = a.clone
    len = tmp_arr.length
    count = index + 1
    while len > 0 && len >= count do
      res_arr << tmp_arr.take(count)
      tmp_arr.shift
      len = tmp_arr.length
    end
  end

  sum = 0
  res_arr.each { |val| sum += val.min }
  #p sum
  p sum % (1e9 + 7).to_i
end