#include using namespace std; #include using namespace atcoder; #define rep(i,n) for(int i=0; i<(n); i++) #define rep1(i,n) for(int i=1; i<=(n); i++) #define sz(x) int(x.size()) #define all(x) (x).begin(),(x).end() #define lINF ll(2e18)//LONG_LONG_MAX //ll #define iINF int(2e9+100)//INT_MAX //int #define yes "Yes" #define no "No" #define kotae cout<; using Pil=pair; using Pli=pair; using Pll=pair; using Pci=pair; using Pcl=pair; template using pqg = priority_queue,greater>; using vi=vector; using vi2=vector>; using vi3=vector>>; using vl=vector; using vl2=vector>; using vl3=vector>>; using vs=vector; using vpii=vector; using vpil=vector; using vpci=vector; using vpcl=vector; using Ti=tuple; using vti=vector; void coutdouble(double x) { printf("%.10f\n", x); } void coutvi(vi vec) { for (int k : vec)cout << k << ' '; cout << endl; return; } void coutvl(vl vec) { for (ll k : vec)cout << k << ' '; cout << endl; return; } void coutseti(set st) { for (int k : st)cout << k << ' '; cout << endl; return; } void coutsetl(set st) { for (ll k : st)cout << k << ' '; cout << endl; return; } void chmax(int &a, int b){ a = max(a, b); return;} void chmin(int &a, int b){ a = min(a, b); return;} void chmaxl(ll &a, ll b){ a = max(a, b); return;} void chminl(ll &a, ll b){ a = min(a, b); return;} void rev(vi &a){ reverse(all(a)); return;} template void srt(T &a){ sort(all(a)); return;} template void srtr(T &a){ sort(a.rbegin(),a.rend()); return;} using mint = modint998244353; using vm=vector; istream& operator>>(istream& is, mint& a) { long long x; is >> x; a = x; return is; } ostream& operator<<(ostream& os, const mint& a) { return os << a.val();} void solve(); ll op(ll a, ll b) {return a+b;} ll e(){return 0;} ll mapping(ll a, ll b) {return a+b;} ll composition(ll a, ll b) {return a+b;} ll id(){return 0;} int main() { int t = 1; //cin >> t; rep(i,t) solve(); return 0; } void solve() { int n,m; cin >> n >> m; vi where(m); rep(i,n) where[i] = i; lazy_segtree t(m); fenwick_tree ft(m); vi a(n),l(n),r(n); ll now = 0; rep(i,n){ cin >> a[i] >> l[i] >> r[i]; l[i]--; t.apply(l[i],r[i],1); ft.add(i,a[i]); } rep(i,n){ now += (ll)(r[i]-l[i])*a[i]; //自分のレート now -= (ll)t.prod(i,i+1)*a[i]; //相手から引かれる自分のレート } int q; cin >> q; rep(qi,q){ int x,y,u,v; cin >> x >> y >> u >> v; x--, y--, u--; int pre = where[x]; where[x] = y; t.apply(l[x],r[x],-1); //自分が関与する範囲をリセット now += (ll)(t.prod(pre,pre+1))*a[x]; //相手から引かれていた自分のレートを加える now -= (ll)(r[x]-l[x])*a[x]; now += ft.sum(l[x],r[x]); //自分のレートの和と引いていた相手のレートの和を引く l[x] = u; r[x] = v; ft.add(pre,-a[x]); //相手から引く用のフェンウィックから引く now += (ll)(r[x]-l[x])*a[x]; //lrの範囲の分自分を加える ft.add(y,a[x]); //加える now -= (ll)ft.sum(l[x],r[x]); //lrの範囲にいる相手の点を引く now -= (t.prod(y,y+1))*a[x]; //移った先で他の人から自分のレートが引かれる t.apply(l[x],r[x],1); //自分が関与する範囲をセット cout << now << endl; } return; }