题目: 输入一个长度为𝑛的数组𝑎,𝑎包括(𝑛−1)𝑛/2个区间。每个区间所有数的和,被称为区间和,求所有(𝑛−1)𝑛/2个区间和的和。由于数值较大,输出mod 1e9+7的结果。

输入 第一行一个整数n,表示数组长度(2<=n<=100000) 接下来n行,每行一个整数ai,表示数组的内容。(0<=ai<=50000) 输出 输出答案mod 1e9+7 输入样例 3 1 2 3 输出样例 20 解法: 统计每个数字出现的次数就好了,每个数字出现的次数为该数字左边数字的个数乘右边的。 代码:

using namespace std;
int main()
{
    long long ans = 0;
    long long mod = 1e9+7;
    long long  n;
    scanf("%lld",&n);
    long long e = n;
    for(int i = 1; i <=n; i++,e--)
    {
        long long a;
        scanf("%lld", &a);
        long long now = (((a*i)%mod) * e) % mod;
        ans = (ans + now) % mod;
    }
    printf("%lld", ans);
    return 0;
}