题目描述与示例
题目描述
米小游拿到了一个数组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\