题目描述
解题思路
按照暴力解题思想,对于分苹果,也就是把Li到Ri就添加Ci个就行,一直遍历就行。但是这样分很多人的时候就容易超时。我们就要想到另一种方法差分序列。
差分序列
差分序列也就是一个原始序列,一个记录增加的序列。其中原始序列记为A,记录增加的序列为B。初始状态下A=B,B[i]总满足条件B[i]=A[i]-A[i-1],B[0]==0所以B[1]=A[1]。所以说B是一个记录A数组前后变化的数组。比如说当我要给Li到Ri的同学分Ci个苹果时我只需要让B[Li]+=ci然后让B[Ri+1]-=ci。这样A的Li到Ri就加了ci。
代码
student,teacher=map(int,input().strip().split())
A=[0]*(student+1)#第0个不参与运算
for i in range(teacher):
Li,Ri,Ci=map(int,input().strip().split())
A[Li]+=Ci
if Ri<student:
A[Ri+1]-=Ci
for i in range(1,student+1):
A[i]=A[i]+A[i-1]
print(A[i],end=' ')
输出的时候就让递增序列一直增加就好了