class FenwickTree: def __init__(self, n: int): self.data = [0] * (n+10) self.n = (n+10) def add(self, p: int, x: int): assert 0 <= p < self.n p += 1 while p < len(self.data): self.data[p] += x p += p & -p def sum(self, p: int) -> int: """区間 [0, p] の和""" assert 0 <= p < self.n p += 1 s = 0 while p > 0: s += self.data[p] p -= p & -p return s def rangesum(self, l: int, r: int) -> int: """区間 [l, r] の和""" assert 0 <= l <= r < self.n s = self.sum(r) if l > 0: s -= self.sum(l-1) return s class RAQ: def __init__(self, n: int): self.a = FenwickTree(n + 10) self.b = FenwickTree(n + 10) self.n = n def add(self, l: int, r: int, x: int) -> None: """区間 [l, r] に x を加算""" assert 0 <= l <= r < self.n l += 1 r += 1 self.a.add(l, -x * (l - 1)) self.b.add(l, x) self.a.add(r + 1, x * r) self.b.add(r + 1, -x) def sum(self, l: int, r: int) -> int: """区間 [l, r] の和""" assert 0 <= l <= r < self.n l += 1 r += 1 a = self.a b = self.b res = a.sum(r) + b.sum(r) * r res -= a.sum(l - 1) + b.sum(l - 1) * (l - 1) return res def get(self, p: int) -> int: return self.sum(p, p) N, M = map(int, input().split()) ft = FenwickTree(M) raq = RAQ(M) iwis = [] for i in range(N): A, L, R = list(map(int, input().split())) L -= 1 R -= 1 iwis.append((i, A, L, R)) # i=家 ft.add(i, A) raq.add(L, R, 1) tot = 0 # 天才度の総和 for p, a, l, r in iwis: tot += a * (r - l + 1) - ft.rangesum(l, r) Q = int(input()) for _ in range(Q): # 人 X は、家 Y へ引っ越す X, Y, U, V = map(lambda x: int(x)-1, input().split()) ntot = tot # 人 X を削除 p, a, l, r = iwis[X] ntot -= a * (r - l + 1) - ft.rangesum(l, r) raq.add(l, r, -1) ntot += raq.get(p) * a ft.add(p, -a) # 人 X を追加 ft.add(Y, a) iwis[X] = (Y, a, U, V) ntot += a * (V - U + 1) - ft.rangesum(U, V) ntot -= raq.get(Y) * a raq.add(U, V, 1) print(ntot) tot = ntot