米哈游拿到了一个数组a, 她用这个数组构造了一个新数组b, 其中a_i代表b数组中有a_i个i.
例如, a = [2,3,1], 则b = [1,1,2,2,2,3].解释: 2表示1有两个, 3表示2有3个, 1表示3有1个.
现给定a, 你需要求出b数组中所有b数组中连续子数组的极差之和. 由于答案过大, 对10^9+7取模.(极差指最大值减最小值)
输入描述:
第一行输入一个正整数n, 表示a数组的个数.
第二行输入n个正整数a_i, 表示a数组的元素.
示例1:
input:
2
2 1
output:
2
解题思路
一次遍历, 直接将最大和-最小和;
代码实现
import java.util.*;
public class test {
final static long mod = (long)Math.pow(10,9)+7;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
long ans = 0;
int m;
long sum = 0, num = 0;
for (int i = 1; i <= n; i++) {
m = sc.nextInt();
if (i != 1) {
ans += ((num*i-sum+mod)%mod)*m%mod;
ans %= mod;
}
sum = (sum + (long) m *i) % mod;
num = (num + m) % mod;
}
System.out.println(ans);
}
}