区间和的和
题目大意:
给出一个数组,求出所有区间和的总和
输入样例:
3
1
2
3
输出样例:
20
数据范围:
对于30%的数据:
1
⩽
n
⩽
100
1\leqslant n\leqslant 100
1⩽n⩽100
对于50%的数据:
1
⩽
n
⩽
1000
1\leqslant n\leqslant 1000
1⩽n⩽1000
对于100%的数据:
1
⩽
n
⩽
100000
1\leqslant n\leqslant 100000
1⩽n⩽100000
解题思路:
直接枚举所有区间会TLE
那我们从每个数下手
每个数可能在多少个区间中出现呢
首先可以发现区间的最前端要小于等于
i
(
i
种
可
能
)
i(i种可能)
i(i种可能),最后端要大于等于
i
(
n
−
i
+
1
种
可
能
)
i(n-i+1种可能)
i(n−i+1种可能)
于是我们直接那两个数相乘然后乘上
a
[
i
]
a[i]
a[i]在求和即可
代码:
#include<cstdio>
using namespace std;
long long n,a,ans;
int main()
{
scanf("%ld",&n);
for (long long i=1;i<=n;++i)
{
scanf("%lld",&a);
ans=(ans+a*i*(n-i+1))%1000000007;//出现次数乘a再求和
}
printf("%lld",ans);
}