这里采用一维差分的方法,用python实现,代码如下:
"""差分是前缀和的逆过程,a[i]=sum(b1,b2,b3.....bi)。通过bi+1,a[i]之后的都会加一"""
t = [0]*100010
class Solution():
@staticmethod
def insert(l,r,c): #由于初始值都是0就省去了两个列表的转化
t[l] += c
t[r] -= c
def solution(self):
n,m = map(int,input().split())
k=list(map(int,input().split()))
for i in range(1,m):
if k[i-1] > k[i]:
Solution.insert(k[i],k[i-1],1)
else:
Solution.insert(k[i-1],k[i],1)
for i in range(1,n):
t[i] += t[i-1]
sum = 0
for i in range(1,n):
a,b,c = map(int,input().split())
if a*t[i] > c+b*t[i]:
sum += (c+b*t[i])
else:
sum += a*t[i]
print(sum)
s=Solution()
s.solution()