前缀和
如果题目给你一个区间,让你求此区间内的总和。从区间的最开始加到区间的结尾就可以完成要求。但是要是题目给你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]减去这个数。
这两种方法都帮区间操作改成了单点操作,极大程度上优化了程序的时间复杂度。