【结论】区间和的和

区间和的和

题目大意:

给出一个数组,求出所有区间和的总和

输入样例:

3
1
2
3

输出样例:

20

数据范围:

对于30%的数据: 1 ⩽ n ⩽ 100 1\leqslant n\leqslant 100 1n100
对于50%的数据: 1 ⩽ n ⩽ 1000 1\leqslant n\leqslant 1000 1n1000
对于100%的数据: 1 ⩽ n ⩽ 100000 1\leqslant n\leqslant 100000 1n100000

解题思路:

直接枚举所有区间会TLE
那我们从每个数下手
每个数可能在多少个区间中出现呢
首先可以发现区间的最前端要小于等于 i ( i 种 可 能 ) i(i种可能) ii,最后端要大于等于 i ( n − i + 1 种 可 能 ) i(n-i+1种可能) ini+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);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值