题目描述与示例
题目描述
米小游拿到了一个数组a,她用这个数组构造一个新数组b,其中ai代表b数组中有ai个i。
例如,若a = [2,3,1],那么b = [1,1,2,2,2,3],因为a1=2,代表b 数组中有2个1;a2=3,代表b数组中有3个2;a3 = 1,代表b数组中有1个3。
现在给定a数组,你需要帮米小游求出b数组中所有连续子数组的极差之和。由于答案可能过大,请对10^9+7 取模。
数组的极差指最大值减去最小值。
输入描述
第一行输入一个正整数n,代表a数组的元素数量。
第二行输入n 个正整数ai,代表a数组的元素。
1 ≤ n ≤ 10^5
1 ≤ ai ≤ 10^9
输出描述
一个整数,代表数组中所有区间的极差之和,对10^9+7取模的值。
示例
输入
Plain
2
2 1
输出
Plain
2
说明
a=[2,1]时,b数组为[1,1,2]。
此时b数组共有6个连续子数组:
1\]的极差为0。
\[1\]的极差为0。
\[2\]的极差为0。
\[1,1\]的极差为0。
\[1,2\]的极差为1。
\[1,1,2\]的极差为1。
因此答案是0+0+0+0+1+1=2。
## 解题思路
根据数据范围大小,显然不能将`a`数组展开回`b`数组求解,而应该直接从`a`数组出发解决问题。
注意到`b`数组实际上是一个单调非递减数组,其子数组也一定单调非递减数组。当子数组的最大值和最小值不相等(即最后一个元素和第一个元素)时,该子数组才对极差有贡献。
对于任意的两元组 ( i , j ) (i, j) (i,j)满足 1 \< = i \< j \< = n 1 \<= i \< j \<= n 1\<=i\