P1969 [NOIP2013 提高组] 积木大赛(差分数组与前缀和)

对于一个数组a定义数组s[i]=\sum_{j=0}^{i}a[j]s[i]=∑j=0i​a[j]为a数组的前缀和数组。

//话中是从0加到i,为了避免数组越位,下标从1开始用
for (int i = 1; i <= n; ++i)
{
	s[i] = s[i - 1] + a[i];
}

 差分数组可以用一个原数组就可以实现,主要式:a[i]-=a[i-1]

//可以正序来写,但需要两个循环,所以可以直接倒着来,比较省时间
for (int i = n; i >= 1; i--)
{
	a[i]-=a[i-1];//一个数组即可实现,如果原数组不能改变的话,也可以再用一个数组,d[i]=a[i]-a[i-1]
}

前缀和与差分互为逆运算,一个数组的前缀和数组的差分数组就是它本身,可能不太好理解这句话,就是假如一个数组a,他的前缀和是sum,那么sum的差分数组就是它本身a,绕了一圈,又回来了,这下应该能懂了吧。

进行m次区间修改后的静态单点求值问题

假设需要操作的数组是数组a长度为8,一开始全为0。用数组d来表示差分数组。

<
下标 0 1 2 3 4 5
d 0 0 0 0 0 0
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值