#include <bits/stdc++.h>
using namespace std;
const char* task = "task";
using ll = long long;
vector<int> st, L, R, lazy; // st = số 1 trong đoạn, lazy = parity flip (0/1)
int n, m, q;
vector<int> root, root2; // root cho biên hàng (n+2), root2 cho biên cột (m+2)
inline int new_node() {
int cur = (int)st.size();
st.emplace_back(0);
L.emplace_back(0);
R.emplace_back(0);
lazy.emplace_back(0);
return cur;
}
// Bảo đảm tồn tại 2 con trước khi push (an toàn)
inline void ensure_children(int id) {
if (L[id] == 0) L[id] = new_node();
if (R[id] == 0) R[id] = new_node();
}
// Đẩy lazy xuống 2 con (flip theo parity)
inline void down(int id, int l, int r) {
if ((lazy[id] & 1) == 0) return;
int mid = (l + r) >> 1;
ensure_children(id);
// lật con trái
st[L[id]] = (mid - l + 1) - st[L[id]];
lazy[L[id]] ^= 1;
// lật con phải
st[R[id]] = (r - mid) - st[R[id]];
lazy[R[id]] ^= 1;
lazy[id] = 0;
}
// Flip đoạn [u..v] trên cây động; trả về delta (mới - cũ) trong đoạn cắt
int flip(int id, int l, int r, int u, int v) {
if (r < u || v < l) return 0;
if (l >= u && r <= v) {
lazy[id] ^= 1;
int prev = st[id];
st[id] = (r - l + 1) - st[id]; // lật cả đoạn
return st[id] - prev; // delta
}
down(id, l, r);
int mid = (l + r) >> 1;
ensure_children(id);
int x = flip(L[id], l, mid, u, v);
int y = flip(R[id], mid + 1, r, u, v);
st[id] = st[L[id]] + st[R[id]];
return x + y;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
if (fopen((string(task) + ".inp").c_str(), "r")) {
freopen((string(task) + ".inp").c_str(), "r", stdin);
freopen((string(task) + ".out").c_str(), "w", stdout);
}
cin >> n >> m >> q;
// cấp phát kho nút cho segtree động
st.reserve(1<<20);
L.reserve(1<<20);
R.reserve(1<<20);
lazy.reserve(1<<20);
new_node(); // chặn id=0 làm "null"
root.assign(n + 2 + 1, 0); // biên hàng: 1..n+1
root2.assign(m + 2 + 1, 0); // biên cột: 1..m+1
for (int i = 1; i <= n + 1; ++i) root[i] = new_node();
for (int i = 1; i <= m + 1; ++i) root2[i] = new_node();
ll ans = 0;
while (q--) {
int a, b, c, d;
cin >> a >> b >> c >> d; // lật [a..b] x [c..d]
// 4 biên của hình chữ nhật:
// - biên ngang: hàng a và b+1, c..d (chiều dài theo cột → phạm vi [1..m])
// - biên dọc: cột c và d+1, a..b (chiều dài theo hàng → phạm vi [1..n])
// Dùng delta (mới - cũ): cộng thẳng vào ans
ans += flip(root[a], 1, m, c, d);
ans += flip(root[b+1], 1, m, c, d);
ans += flip(root2[c], 1, n, a, b);
ans += flip(root2[d+1],1, n, a, b);
cout << ans << '\n';
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpjb25zdCBjaGFyKiB0YXNrID0gInRhc2siOwp1c2luZyBsbCA9IGxvbmcgbG9uZzsKCnZlY3RvcjxpbnQ+IHN0LCBMLCBSLCBsYXp5OyAvLyBzdCA9IHPhu5EgMSB0cm9uZyDEkW/huqFuLCBsYXp5ID0gcGFyaXR5IGZsaXAgKDAvMSkKaW50IG4sIG0sIHE7CnZlY3RvcjxpbnQ+IHJvb3QsIHJvb3QyOyAgICAvLyByb290IGNobyBiacOqbiBow6BuZyAobisyKSwgcm9vdDIgY2hvIGJpw6puIGPhu5l0IChtKzIpCgppbmxpbmUgaW50IG5ld19ub2RlKCkgewogICAgaW50IGN1ciA9IChpbnQpc3Quc2l6ZSgpOwogICAgc3QuZW1wbGFjZV9iYWNrKDApOwogICAgTC5lbXBsYWNlX2JhY2soMCk7CiAgICBSLmVtcGxhY2VfYmFjaygwKTsKICAgIGxhenkuZW1wbGFjZV9iYWNrKDApOwogICAgcmV0dXJuIGN1cjsKfQoKLy8gQuG6o28gxJHhuqNtIHThu5NuIHThuqFpIDIgY29uIHRyxrDhu5tjIGtoaSBwdXNoIChhbiB0b8OgbikKaW5saW5lIHZvaWQgZW5zdXJlX2NoaWxkcmVuKGludCBpZCkgewogICAgaWYgKExbaWRdID09IDApIExbaWRdID0gbmV3X25vZGUoKTsKICAgIGlmIChSW2lkXSA9PSAwKSBSW2lkXSA9IG5ld19ub2RlKCk7Cn0KCi8vIMSQ4bqpeSBsYXp5IHh14buRbmcgMiBjb24gKGZsaXAgdGhlbyBwYXJpdHkpCmlubGluZSB2b2lkIGRvd24oaW50IGlkLCBpbnQgbCwgaW50IHIpIHsKICAgIGlmICgobGF6eVtpZF0gJiAxKSA9PSAwKSByZXR1cm47CiAgICBpbnQgbWlkID0gKGwgKyByKSA+PiAxOwogICAgZW5zdXJlX2NoaWxkcmVuKGlkKTsKCiAgICAvLyBs4bqtdCBjb24gdHLDoWkKICAgIHN0W0xbaWRdXSA9IChtaWQgLSBsICsgMSkgLSBzdFtMW2lkXV07CiAgICBsYXp5W0xbaWRdXSBePSAxOwoKICAgIC8vIGzhuq10IGNvbiBwaOG6o2kKICAgIHN0W1JbaWRdXSA9IChyIC0gbWlkKSAtIHN0W1JbaWRdXTsKICAgIGxhenlbUltpZF1dIF49IDE7CgogICAgbGF6eVtpZF0gPSAwOwp9CgovLyBGbGlwIMSRb+G6oW4gW3UuLnZdIHRyw6puIGPDonkgxJHhu5luZzsgdHLhuqMgduG7gSBkZWx0YSAobeG7m2kgLSBjxakpIHRyb25nIMSRb+G6oW4gY+G6r3QKaW50IGZsaXAoaW50IGlkLCBpbnQgbCwgaW50IHIsIGludCB1LCBpbnQgdikgewogICAgaWYgKHIgPCB1IHx8IHYgPCBsKSByZXR1cm4gMDsKCiAgICBpZiAobCA+PSB1ICYmIHIgPD0gdikgewogICAgICAgIGxhenlbaWRdIF49IDE7CiAgICAgICAgaW50IHByZXYgPSBzdFtpZF07CiAgICAgICAgc3RbaWRdID0gKHIgLSBsICsgMSkgLSBzdFtpZF07ICAgLy8gbOG6rXQgY+G6oyDEkW/huqFuCiAgICAgICAgcmV0dXJuIHN0W2lkXSAtIHByZXY7ICAgICAgICAgICAgLy8gZGVsdGEKICAgIH0KCiAgICBkb3duKGlkLCBsLCByKTsKICAgIGludCBtaWQgPSAobCArIHIpID4+IDE7CiAgICBlbnN1cmVfY2hpbGRyZW4oaWQpOwoKICAgIGludCB4ID0gZmxpcChMW2lkXSwgbCwgbWlkLCB1LCB2KTsKICAgIGludCB5ID0gZmxpcChSW2lkXSwgbWlkICsgMSwgciwgdSwgdik7CiAgICBzdFtpZF0gPSBzdFtMW2lkXV0gKyBzdFtSW2lkXV07CiAgICByZXR1cm4geCArIHk7Cn0KCmludCBtYWluKCkgewogICAgaW9zOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwogICAgY2luLnRpZShudWxscHRyKTsKCiAgICBpZiAoZm9wZW4oKHN0cmluZyh0YXNrKSArICIuaW5wIikuY19zdHIoKSwgInIiKSkgewogICAgICAgIGZyZW9wZW4oKHN0cmluZyh0YXNrKSArICIuaW5wIikuY19zdHIoKSwgInIiLCBzdGRpbik7CiAgICAgICAgZnJlb3Blbigoc3RyaW5nKHRhc2spICsgIi5vdXQiKS5jX3N0cigpLCAidyIsIHN0ZG91dCk7CiAgICB9CgogICAgY2luID4+IG4gPj4gbSA+PiBxOwoKICAgIC8vIGPhuqVwIHBow6F0IGtobyBuw7p0IGNobyBzZWd0cmVlIMSR4buZbmcKICAgIHN0LnJlc2VydmUoMTw8MjApOwogICAgTC5yZXNlcnZlKDE8PDIwKTsKICAgIFIucmVzZXJ2ZSgxPDwyMCk7CiAgICBsYXp5LnJlc2VydmUoMTw8MjApOwoKICAgIG5ld19ub2RlKCk7IC8vIGNo4bq3biBpZD0wIGzDoG0gIm51bGwiCgogICAgcm9vdC5hc3NpZ24obiArIDIgKyAxLCAwKTsgICAvLyBiacOqbiBow6BuZzogMS4ubisxCiAgICByb290Mi5hc3NpZ24obSArIDIgKyAxLCAwKTsgIC8vIGJpw6puIGPhu5l0OiAxLi5tKzEKCiAgICBmb3IgKGludCBpID0gMTsgaSA8PSBuICsgMTsgKytpKSByb290W2ldICA9IG5ld19ub2RlKCk7CiAgICBmb3IgKGludCBpID0gMTsgaSA8PSBtICsgMTsgKytpKSByb290MltpXSA9IG5ld19ub2RlKCk7CgogICAgbGwgYW5zID0gMDsKICAgIHdoaWxlIChxLS0pIHsKICAgICAgICBpbnQgYSwgYiwgYywgZDsKICAgICAgICBjaW4gPj4gYSA+PiBiID4+IGMgPj4gZDsgLy8gbOG6rXQgW2EuLmJdIHggW2MuLmRdCgogICAgICAgIC8vIDQgYmnDqm4gY+G7p2EgaMOsbmggY2jhu68gbmjhuq10OgogICAgICAgIC8vIC0gYmnDqm4gbmdhbmc6IGjDoG5nIGEgdsOgIGIrMSwgYy4uZCAoY2hp4buBdSBkw6BpIHRoZW8gY+G7mXQg4oaSIHBo4bqhbSB2aSBbMS4ubV0pCiAgICAgICAgLy8gLSBiacOqbiBk4buNYzogIGPhu5l0IGMgdsOgIGQrMSwgYS4uYiAoY2hp4buBdSBkw6BpIHRoZW8gaMOgbmcg4oaSIHBo4bqhbSB2aSBbMS4ubl0pCgogICAgICAgIC8vIETDuW5nIGRlbHRhICht4bubaSAtIGPFqSk6IGPhu5luZyB0aOG6s25nIHbDoG8gYW5zCiAgICAgICAgYW5zICs9IGZsaXAocm9vdFthXSwgICAxLCBtLCBjLCBkKTsKICAgICAgICBhbnMgKz0gZmxpcChyb290W2IrMV0sIDEsIG0sIGMsIGQpOwogICAgICAgIGFucyArPSBmbGlwKHJvb3QyW2NdLCAgMSwgbiwgYSwgYik7CiAgICAgICAgYW5zICs9IGZsaXAocm9vdDJbZCsxXSwxLCBuLCBhLCBiKTsKCiAgICAgICAgY291dCA8PCBhbnMgPDwgJ1xuJzsKICAgIH0KICAgIHJldHVybiAwOwp9Cg==