模版题-数组专题-前缀和解决区间和问题
**前缀和**的思想:重复利用计算过的子数组之和,从而降低区间查询需要累加计算的次数。
**前缀和在涉及计算区间和的问题时非常实用。**
特别注意: 在使用前缀和求解的时候,要特别注意 求解区间。
如果要求区间下标[2, 5]的区间和,那么应该是 prefix_sum[5] - prefix_sum[1],而不是 prefix_sum[5] - prefix_sum[2]。
输入示例
```
5
1
2
3
4
5
0 1
1 3
第一行输入为整数数组 Array 的长度 n,
接下来 n 行,每行一个整数,表示数组的元素。
随后的输入为需要计算总和的区间下标:a,b (b > = a),直至文件结束。
```
**代码**
```python
import sys
input = sys.stdin.read
def main():
# 读取所有 空白字符进行分割
data = input().split()
index = 0
n = int( data[ index ] )
index += 1
vec = []
for i in range( n ):
vec.append(int(data[ index + i ]))
index += n
# 前缀和
p = [ 0 ] * n
p[ 0 ] = vec[ 0 ]
for i in range( 1, n ):
p[ i ] = p[ i - 1 ] + vec[ i ]
# 查询区间和
while index < len( data ):
a = int( data[ index ] )
b = int( data[ index + 1] )
index += 2
if a == 0:
sum_value = p[ b ]
else:
sum_value = p[ b ] - p[ a - 1 ]
print( sum_value )
if __name__ == "__main__":
main()
```
`split()`方法补充:
```
不传任何参数时会按以下规则分割
- 分割符:任意空白字符,包括:
空格 ' '
换行符 '\n'
制表符 '\t'
回车符 '\r'
换页符 '\f'
垂直制表符 '\v'
- 连续空白:多个连续的空白字符会被当作一个分隔符处理
- 自动去除首尾空白:字符串开头和结尾的空白会被忽略
```