解释:
数据预处理方法,可以降低查询的时间复杂度。先构造前缀和列表,之后直接调用。
前缀和就是从位置1到位置i这个区间内的所有的数字之和
例题:
1.
n, m = map(int, input().split())
a = list(map(int, input().split()))
prefix = [0] * (n + 1)
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]) # 求部分和
2.
n = int(input())
nums = list(map(int,input().split()))
prefix = [0] * (n+1)
for i in range(n):
prefix[i+1] = prefix[i] + nums[i] # 前缀和模板
ans = 0
for i in range(n-1):
if n!=i+2: # 去除nums[n-2]*nums[n-1]的情况
tmp = (prefix[n] - prefix[i+1]) * nums[i]
ans += tmp
last = nums[n-1]*nums[n-2]
print(ans+last)