前缀和和差分

前缀和

如果题目给你一个区间,让你求此区间内的总和。从区间的最开始加到区间的结尾就可以完成要求。但是要是题目给你q(q<=50000)个询问呢,且每个询问的区间长度是10000左右呢。如果在暴力的加和肯定解决不了问题。这时我们可以使用前缀和解决这件事情。对于每个a[i],我们都可以让其表达为前i个值的和。这样对于从l到r的询问我们就可以用a[r]-a[l-1]来O(1)的求出这个询问。

差分

如果我们要对一个区间的值进行修改,让每个区间的值都加上或者减去某个数呢。我们可以对其区间的每个值都进行修改。当区间大到一定程度时,我们的修改就要花费非常多的时间。我们可以这样定义一个数列,a[i]代表这个数与前一个数的差值。对区间(从r到l)上每个数的加法操作就可以转化为对a[l]加上这个数,对a[r+1]减去这个数。

这两种方法都帮区间操作改成了单点操作,极大程度上优化了程序的时间复杂度。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值