生成前缀和数组
1 | nums=[1,3,5,7,9] |
也可以利用itertools.accumulate:
1 | from itertools import accumulate |
计算区间的和
$\sum_{k=i}^j nums[k]$,即nums[i]+nums[i+1]+……+nums[j-1]+nums[j]
根据定义
1 | pre[j+1]=nums[0]+……+nums[i]+nums[i+1]+……+nums[j] |
所以sum(nums[i:j+1])=pre[j+1]-pre[i]
(O(1)的时间复杂度)
前缀异或
- 生成前缀数组
1 | nums=[1,3,5,7,9] |
1 | from itertools import accumulate |
- 使用
1 | pre[j+1]^pre[i] |
前缀积
- 生成前缀数组
1 | nums=[1,3,5,7,9] |
1 | from itertools import accumulate |
- 使用
1 | pre[j+1]//pre[i] |
二维前缀和
1 | pre[i][j]=pre[i-1][j]+pre[i][j-1]-pre[i-1][j-1]+nums[i][j] |