题目地址(2281. 巫师的总力量和)
作为国王的统治者,你有一支巫师军队听你指挥.
对于连续的一组巫师(也就是这些巫师的力量值是 strength 的 子数组),总力量 定义为以下两个值的 乘积 :
请你返回 所有 巫师组的 总 力量之和.由于答案可能很大,请将答案对 109 + 7 取余 后返回.
子数组 是一个数组里 非空 连续子序列.
输出:213
如果想做出来这道题,建议先做一下简化版的这道题:907. 子数组的最小值之和 
简单说一下上面那个简化版的题目.
一种思考方式是计算每一个数组项 nums[i] 对结果的贡献 c[i],那么答案就是对 c[i] 求和.
而找到左侧(或者右侧)第一个比其大(或者小)的元素考虑使用单调栈.
对这道题来说,我们也需要知道左侧和右侧第一个比其小的,因此使用单调栈也可以解决.不同的是,我们需要求所有子数组和的和.
关键是每一项 a 对结果的贡献是多少呢?我们知道子数组和可以用前缀和来计算,只要知道左右端点即可求出.而这里有两个变量,一个是左边界,一个是右边界.