代码:
n, m = map(int, input().split())
a = list(map(int, input().split()))
prefix = [0] * (n + 2)
for i in range(n):
prefix[i + 1] = prefix[i] + a[i] # 求前缀和
# print(prefix)
for i in range(m):
l, r = map(int, input().split())
print(prefix[r] - prefix[l - 1]) # 求部分和
总结:
最开始没把这道题放在眼里,也不知道要用前缀和算法去做。直接用切片索引出来,结果时间超限。
后来去网上查了资料才知道前缀和这种算法:
前缀和是一种重要的预处理,能大大降低查询的时间复杂度。
咱们的代码先初始化一个数组,然后遍历数组求前缀和,最后在索引,就可以很快地求出来其中一段的和