差分数组—区间修改问题
使用差分数组可以将算法的复杂度从O(n²)降到O(n)
1.首先构建差值数组。
2.将起点位置的差值数组相应加一个数,终点的下一位减去那个数。(为了防止数组越界,建议差值数组长度+1)
3.从前往后累加求和
例题说明。
N,Q = map(int,input().split())
a = list(map(int,input().split()))
b = [0]*(N+1)
b[0]=a[0]
for j in range(1,N):
b[j] = a[j] - a[j-1]
for i in range(Q):
l,r,x = map(int,input().split())
b[l-1] += x
b[r] -=x
for i in range(1,N):
b[i] = b[i] +b[i-1]
for i in range(N):
if b[i] <=0:
print(0,end = ' ')
else:
print(b[i],end = ' ')
差分数组:
def chafen(arr,l,r,x):
N = len(arr)
b = [0]*(N+1)
b[0]=a[0]
for j in range(1,N):
b[j] = a[j] - a[j-1]
b[l-1] += x
b[r] -=x
for i in range(1,N):
b[i] = b[i] +b[i-1]
for i in range(N):
if b[i] <=0:
print(0,end = ' ')
else:
print(b[i],end = ' ')