1class Solution {2public:3int sumSubarrayMins(vector<int> &n) {4vector<long> s, sums(n.size(), 0);5long j, res = 0, mod = 1000000007;6for (int i = 0; i < n.size(); ++i) {7while (!s.empty() && n[s.back()] > n[i]) s.pop_back();8j = !s.empty() ? s.back() : -1;910sums[i] = ((j >= 0 ? sums[j] : 0) + (i - j) * n[i]) % mod;11s.push_back(i);12}1314for (int i = 0; i < sums.size(); ++i) res = (res + sums[i]) % mod;15return res;16}17};