前缀和

编号
a1234567891011121314151617
b10111213

现在要从a数组中截取b数组知道b的和1000000次,而且不能够直接记下b数组的值,要一次一次算,怎么快速求?

这样看也许看不出什么,但是我再画一幅图你就明白了

编号
c12345678910111213~~~~
d123456789~~~~~~~~

可见c-d即为b
也就是
(1+2+…+13)-(1+2+…+9)

好,下面我来说一下怎么做

先把
sum[1]=1,
sum[2]=1+2,
sum[3]=1+2+3

sum[17]=1+2+…+17
所有从1开始依次向后加的值都算出来
想要求区间和(n-m)的和,只要用sum[m]-sum[n]就可以了

原本O(4000000)变成了O(2000153),如果区间越长,次数越多,优势更大。

这是NOIP比赛中的常见思想!一定要学会的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值