考えたこと
鉄道はとの区間しか移動できないから,それぞれの鉄道に何回乗るかをカウントする.
カウントしたらをそれぞれの鉄道で計算するだけだが,鉄道に何回乗るかをカウントするのがネックになる.
愚直に区間内の配列の値をすると,1→n→2 みたいなときに?になる可能性がある.そこで,累積和を用いて区間の最初と最後だけで更新できるように工夫する.
区間の最初をすることによって後ろの全要素にしたことになり,区間の最後をするとそれ以降の全要素をすることになるので,区間内だけすることができる.
n, m =map(int, input().split()) p = list(map(int, input().split())) ticket = [list(map(int, input().split())) for _ in range(n - 1)] cnt = [0] * (n - 1) for i in range(m - 1): tmp = list(sorted([p[i], p[i + 1]])) cnt[tmp[0] - 1] += 1 if tmp[1] != n: cnt[tmp[1] - 1] -= 1 csum = [cnt[0]] for i in range(1, n - 1): csum.append(cnt[i] + csum[i - 1]) ans = 0 for i in range(n - 1): ans += min(ticket[i][0] * csum[i], ticket[i][1] * csum[i] + ticket[i][2]) print(ans)