#include using namespace std; #define For(i, a, b) for(int i = (a); i < (b); i++) #define rep(i, n) For(i, 0, n) #define rFor(i, a, b) for(int i = (a); i >= (b); i--) #define ALL(v) (v).begin(), (v).end() #define rALL(v) (v).rbegin(), (v).rend() #define SZ(v) ((int)(v).size()) using lint = long long; using ld = long double; const int INF = 2000000000; const lint LINF = 1000000000000000000; // 真上から反時計回り const int di[] = {-1, 0, 1, 0}; const int dj[] = {0, -1, 0, 1}; const int di8[] = {-1, -1, 0, 1, 1, 1, 0, -1}; const int dj8[] = {0, -1, -1, -1, 0, 1, 1, 1}; struct SetupIo { SetupIo() { ios::sync_with_stdio(false); cin.tie(nullptr); cout << fixed << setprecision(15); cerr << fixed << setprecision(15); } } setupio; template bool chmin(T &a, const T &b) { return a > b ? a = b, 1 : 0; } template bool chmax(T &a, const T &b) { return a < b ? a = b, 1 : 0; } template T mypow(T a, T b) { T res = 1; while (b) { if (b & 1) { res *= a; } a *= a; b >>= 1; } return res; } template T modpow(T a, T b, T mod) { T res = 1; while (b) { if (b & 1) { res = (res * a) % mod; } a = (a * a) % mod; b >>= 1; } return res; } #include #include using S = lint; S op(S a, S b) { return a + b; } S e() { return 0; } int main() { int N, M; cin >> N >> M; vector A(N); vector L(N), R(N); rep(i, N) { cin >> A[i] >> L[i] >> R[i]; L[i]--; } vector house(N); rep(i, N) { house[i] = i; } atcoder::segtree rating(M); rep(i, N) { rating.set(house[i], A[i]); } atcoder::lazy_segtree jimoto(M); rep(i, N) { jimoto.apply(L[i], R[i], 1); } lint ans = 0; rep(i, N) { ans += A[i] * (R[i] - L[i]) - rating.prod(L[i], R[i]); } int Q; cin >> Q; rep(_, Q) { int x, y, u, v; cin >> x >> y >> u >> v; x--, y--, u--; // 一旦岩井星人 x を別の場所へ置いておく // 岩井星人 x の天才度が減少 ans -= A[x] * (R[x] - L[x]) - rating.prod(L[x], R[x]); jimoto.apply(L[x], R[x], -1); // 岩井星人 x のいた家が空になることで, x 以外の星人の天才度が変化 ans += A[x] * jimoto.get(house[x]); // 岩井星人 x を新たな家に引っ越しさせる rating.set(house[x], 0); house[x] = y; rating.set(house[x], A[x]); // 岩井星人 x が新たな家に来ることで, x 以外の星人の天才度が変化 ans -= A[x] * jimoto.get(house[x]); // 岩井星人 x の天才度が変化 L[x] = u, R[x] = v; ans += A[x] * (R[x] - L[x]) - rating.prod(L[x], R[x]); jimoto.apply(L[x], R[x], 1); cout << ans << "\n"; } }