#include class Solution { static const int MOD = 1000000007; public: int sumSubarrayMins(const std::vector &arr) { long s = 0; std::vector stack; for (auto i = 0; i <= static_cast(arr.size()); ++i) { while (!stack.empty() && (i == arr.size() || arr[stack.back()] >= arr[i])) { int mid = stack.back(); stack.pop_back(); int l = stack.empty() ? -1 : stack.back(); int r = i; long count = (mid - l) * (r - mid) % MOD; s += (count * arr[mid]) % MOD; s %= MOD; } stack.push_back(i); } return static_cast(s); } };