#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
/**
* Giải thuật:
* - Tách bài toán thành tính toán cạnh dọc và cạnh ngang riêng biệt.
* - Với mỗi chiều, ta coi mỗi cột/hàng là một dãy các đoạn thẳng.
* - Sử dụng Segment Tree hỗ trợ đảo trạng thái đoạn (Range Flip) và đếm số lượng phần tử bằng 1.
* - Xử lý offline theo từng cột/hàng để tiết kiệm bộ nhớ.
*/
struct Event {
int t, l, r;
};
const int MAX_VAL = 1000005;
struct Node {
int cnt1;
bool lazy;
} tree[4000005];
// Đảo trạng thái một nút trong Segment Tree
inline void apply(int v, int tl, int tr) {
tree[v].cnt1 = (tr - tl + 1) - tree[v].cnt1;
tree[v].lazy = !tree[v].lazy;
}
// Đẩy tag lazy xuống các con
inline void push_down(int v, int tl, int tr) {
if (tree[v].lazy) {
int tm = (tl + tr) >> 1;
apply(v << 1, tl, tm);
apply(v << 1 | 1, tm + 1, tr);
tree[v].lazy = false;
}
}
// Cập nhật đảo trạng thái đoạn [l, r]
void update(int v, int tl, int tr, int l, int r) {
if (l > r) return;
if (l == tl && r == tr) {
apply(v, tl, tr);
} else {
push_down(v, tl, tr);
int tm = (tl + tr) >> 1;
if (r <= tm) update(v << 1, tl, tm, l, r);
else if (l > tm) update(v << 1 | 1, tm + 1, tr, l, r);
else {
update(v << 1, tl, tm, l, tm);
update(v << 1 | 1, tm + 1, tr, tm + 1, r);
}
tree[v].cnt1 = tree[v << 1].cnt1 + tree[v << 1 | 1].cnt1;
}
}
long long delta_ans[200005];
vector<Event> events[MAX_VAL];
struct Rect {
int x1, x2, y1, y2;
};
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
int N, M, Q;
if (!(cin >> N >> M >> Q)) return 0;
vector<Rect> rects(Q);
for (int i = 0; i < Q; ++i) {
cin >> rects[i].x1 >> rects[i].x2 >> rects[i].y1 >> rects[i].y2;
}
auto solve_dimension = [&](int num_groups, int line_length, bool vertical_scan) {
for (int i = 0; i <= num_groups; ++i) events[i].clear();
for (int i = 0; i < Q; ++i) {
if (vertical_scan) {
// Các cạnh dọc thay đổi tại cột y1-1 và y2
events[rects[i].y1 - 1].push_back({i + 1, rects[i].x1, rects[i].x2});
events[rects[i].y2].push_back({i + 1, rects[i].x1, rects[i].x2});
} else {
// Các cạnh ngang thay đổi tại hàng x1-1 và x2
events[rects[i].x1 - 1].push_back({i + 1, rects[i].y1, rects[i].y2});
events[rects[i].x2].push_back({i + 1, rects[i].y1, rects[i].y2});
}
}
for (int j = 0; j <= num_groups; ++j) {
if (events[j].empty()) continue;
sort(events[j].begin(), events[j].end(), [](const Event& a, const Event& b) {
return a.t < b.t;
});
int last_count = 0;
for (auto& ev : events[j]) {
update(1, 1, line_length, ev.l, ev.r);
int current_count = tree[1].cnt1;
delta_ans[ev.t] += (current_count - last_count);
last_count = current_count;
}
// Reset cây về 0 để xử lý cột/hàng tiếp theo
for (auto& ev : events[j]) {
update(1, 1, line_length, ev.l, ev.r);
}
}
};
// Bước 1: Tính toán đóng góp của các cạnh dọc vào chu vi
solve_dimension(M, N, true);
// Bước 2: Tính toán đóng góp của các cạnh ngang vào chu vi
solve_dimension(N, M, false);
// Bước 3: Tổng hợp kết quả sau mỗi truy vấn
long long total_perimeter = 0;
for (int i = 1; i <= Q; ++i) {
total_perimeter += delta_ans[i];
cout << total_perimeter << (i == Q ? "" : " ");
}
cout << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8YWxnb3JpdGhtPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCi8qKgogKiBHaeG6o2kgdGh14bqtdDoKICogLSBUw6FjaCBiw6BpIHRvw6FuIHRow6BuaCB0w61uaCB0b8OhbiBj4bqhbmggZOG7jWMgdsOgIGPhuqFuaCBuZ2FuZyByacOqbmcgYmnhu4d0LgogKiAtIFbhu5tpIG3hu5dpIGNoaeG7gXUsIHRhIGNvaSBt4buXaSBj4buZdC9ow6BuZyBsw6AgbeG7mXQgZMOjeSBjw6FjIMSRb+G6oW4gdGjhurNuZy4KICogLSBT4butIGThu6VuZyBTZWdtZW50IFRyZWUgaOG7lyB0cuG7oyDEkeG6o28gdHLhuqFuZyB0aMOhaSDEkW/huqFuIChSYW5nZSBGbGlwKSB2w6AgxJHhur9tIHPhu5EgbMaw4bujbmcgcGjhuqduIHThu60gYuG6sW5nIDEuCiAqIC0gWOG7rSBsw70gb2ZmbGluZSB0aGVvIHThu6tuZyBj4buZdC9ow6BuZyDEkeG7gyB0aeG6v3Qga2nhu4dtIGLhu5kgbmjhu5suCiAqLwoKc3RydWN0IEV2ZW50IHsKICAgIGludCB0LCBsLCByOwp9OwoKY29uc3QgaW50IE1BWF9WQUwgPSAxMDAwMDA1OwpzdHJ1Y3QgTm9kZSB7CiAgICBpbnQgY250MTsKICAgIGJvb2wgbGF6eTsKfSB0cmVlWzQwMDAwMDVdOwoKLy8gxJDhuqNvIHRy4bqhbmcgdGjDoWkgbeG7mXQgbsO6dCB0cm9uZyBTZWdtZW50IFRyZWUKaW5saW5lIHZvaWQgYXBwbHkoaW50IHYsIGludCB0bCwgaW50IHRyKSB7CiAgICB0cmVlW3ZdLmNudDEgPSAodHIgLSB0bCArIDEpIC0gdHJlZVt2XS5jbnQxOwogICAgdHJlZVt2XS5sYXp5ID0gIXRyZWVbdl0ubGF6eTsKfQoKLy8gxJDhuql5IHRhZyBsYXp5IHh14buRbmcgY8OhYyBjb24KaW5saW5lIHZvaWQgcHVzaF9kb3duKGludCB2LCBpbnQgdGwsIGludCB0cikgewogICAgaWYgKHRyZWVbdl0ubGF6eSkgewogICAgICAgIGludCB0bSA9ICh0bCArIHRyKSA+PiAxOwogICAgICAgIGFwcGx5KHYgPDwgMSwgdGwsIHRtKTsKICAgICAgICBhcHBseSh2IDw8IDEgfCAxLCB0bSArIDEsIHRyKTsKICAgICAgICB0cmVlW3ZdLmxhenkgPSBmYWxzZTsKICAgIH0KfQoKLy8gQ+G6rXAgbmjhuq10IMSR4bqjbyB0cuG6oW5nIHRow6FpIMSRb+G6oW4gW2wsIHJdCnZvaWQgdXBkYXRlKGludCB2LCBpbnQgdGwsIGludCB0ciwgaW50IGwsIGludCByKSB7CiAgICBpZiAobCA+IHIpIHJldHVybjsKICAgIGlmIChsID09IHRsICYmIHIgPT0gdHIpIHsKICAgICAgICBhcHBseSh2LCB0bCwgdHIpOwogICAgfSBlbHNlIHsKICAgICAgICBwdXNoX2Rvd24odiwgdGwsIHRyKTsKICAgICAgICBpbnQgdG0gPSAodGwgKyB0cikgPj4gMTsKICAgICAgICBpZiAociA8PSB0bSkgdXBkYXRlKHYgPDwgMSwgdGwsIHRtLCBsLCByKTsKICAgICAgICBlbHNlIGlmIChsID4gdG0pIHVwZGF0ZSh2IDw8IDEgfCAxLCB0bSArIDEsIHRyLCBsLCByKTsKICAgICAgICBlbHNlIHsKICAgICAgICAgICAgdXBkYXRlKHYgPDwgMSwgdGwsIHRtLCBsLCB0bSk7CiAgICAgICAgICAgIHVwZGF0ZSh2IDw8IDEgfCAxLCB0bSArIDEsIHRyLCB0bSArIDEsIHIpOwogICAgICAgIH0KICAgICAgICB0cmVlW3ZdLmNudDEgPSB0cmVlW3YgPDwgMV0uY250MSArIHRyZWVbdiA8PCAxIHwgMV0uY250MTsKICAgIH0KfQoKbG9uZyBsb25nIGRlbHRhX2Fuc1syMDAwMDVdOwp2ZWN0b3I8RXZlbnQ+IGV2ZW50c1tNQVhfVkFMXTsKCnN0cnVjdCBSZWN0IHsKICAgIGludCB4MSwgeDIsIHkxLCB5MjsKfTsKCmludCBtYWluKCkgewogICAgaW9zOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwogICAgY2luLnRpZShOVUxMKTsKCiAgICBpbnQgTiwgTSwgUTsKICAgIGlmICghKGNpbiA+PiBOID4+IE0gPj4gUSkpIHJldHVybiAwOwoKICAgIHZlY3RvcjxSZWN0PiByZWN0cyhRKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgUTsgKytpKSB7CiAgICAgICAgY2luID4+IHJlY3RzW2ldLngxID4+IHJlY3RzW2ldLngyID4+IHJlY3RzW2ldLnkxID4+IHJlY3RzW2ldLnkyOwogICAgfQoKICAgIGF1dG8gc29sdmVfZGltZW5zaW9uID0gWyZdKGludCBudW1fZ3JvdXBzLCBpbnQgbGluZV9sZW5ndGgsIGJvb2wgdmVydGljYWxfc2NhbikgewogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDw9IG51bV9ncm91cHM7ICsraSkgZXZlbnRzW2ldLmNsZWFyKCk7CgogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgUTsgKytpKSB7CiAgICAgICAgICAgIGlmICh2ZXJ0aWNhbF9zY2FuKSB7CiAgICAgICAgICAgICAgICAvLyBDw6FjIGPhuqFuaCBk4buNYyB0aGF5IMSR4buVaSB04bqhaSBj4buZdCB5MS0xIHbDoCB5MgogICAgICAgICAgICAgICAgZXZlbnRzW3JlY3RzW2ldLnkxIC0gMV0ucHVzaF9iYWNrKHtpICsgMSwgcmVjdHNbaV0ueDEsIHJlY3RzW2ldLngyfSk7CiAgICAgICAgICAgICAgICBldmVudHNbcmVjdHNbaV0ueTJdLnB1c2hfYmFjayh7aSArIDEsIHJlY3RzW2ldLngxLCByZWN0c1tpXS54Mn0pOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgLy8gQ8OhYyBj4bqhbmggbmdhbmcgdGhheSDEkeG7lWkgdOG6oWkgaMOgbmcgeDEtMSB2w6AgeDIKICAgICAgICAgICAgICAgIGV2ZW50c1tyZWN0c1tpXS54MSAtIDFdLnB1c2hfYmFjayh7aSArIDEsIHJlY3RzW2ldLnkxLCByZWN0c1tpXS55Mn0pOwogICAgICAgICAgICAgICAgZXZlbnRzW3JlY3RzW2ldLngyXS5wdXNoX2JhY2soe2kgKyAxLCByZWN0c1tpXS55MSwgcmVjdHNbaV0ueTJ9KTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPD0gbnVtX2dyb3VwczsgKytqKSB7CiAgICAgICAgICAgIGlmIChldmVudHNbal0uZW1wdHkoKSkgY29udGludWU7CiAgICAgICAgICAgIHNvcnQoZXZlbnRzW2pdLmJlZ2luKCksIGV2ZW50c1tqXS5lbmQoKSwgW10oY29uc3QgRXZlbnQmIGEsIGNvbnN0IEV2ZW50JiBiKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gYS50IDwgYi50OwogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIGludCBsYXN0X2NvdW50ID0gMDsKICAgICAgICAgICAgZm9yIChhdXRvJiBldiA6IGV2ZW50c1tqXSkgewogICAgICAgICAgICAgICAgdXBkYXRlKDEsIDEsIGxpbmVfbGVuZ3RoLCBldi5sLCBldi5yKTsKICAgICAgICAgICAgICAgIGludCBjdXJyZW50X2NvdW50ID0gdHJlZVsxXS5jbnQxOwogICAgICAgICAgICAgICAgZGVsdGFfYW5zW2V2LnRdICs9IChjdXJyZW50X2NvdW50IC0gbGFzdF9jb3VudCk7CiAgICAgICAgICAgICAgICBsYXN0X2NvdW50ID0gY3VycmVudF9jb3VudDsKICAgICAgICAgICAgfQogICAgICAgICAgICAvLyBSZXNldCBjw6J5IHbhu4EgMCDEkeG7gyB44butIGzDvSBj4buZdC9ow6BuZyB0aeG6v3AgdGhlbwogICAgICAgICAgICBmb3IgKGF1dG8mIGV2IDogZXZlbnRzW2pdKSB7CiAgICAgICAgICAgICAgICB1cGRhdGUoMSwgMSwgbGluZV9sZW5ndGgsIGV2LmwsIGV2LnIpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfTsKCiAgICAvLyBCxrDhu5tjIDE6IFTDrW5oIHRvw6FuIMSRw7NuZyBnw7NwIGPhu6dhIGPDoWMgY+G6oW5oIGThu41jIHbDoG8gY2h1IHZpCiAgICBzb2x2ZV9kaW1lbnNpb24oTSwgTiwgdHJ1ZSk7CiAgICAvLyBCxrDhu5tjIDI6IFTDrW5oIHRvw6FuIMSRw7NuZyBnw7NwIGPhu6dhIGPDoWMgY+G6oW5oIG5nYW5nIHbDoG8gY2h1IHZpCiAgICBzb2x2ZV9kaW1lbnNpb24oTiwgTSwgZmFsc2UpOwoKICAgIC8vIELGsOG7m2MgMzogVOG7lW5nIGjhu6NwIGvhur90IHF14bqjIHNhdSBt4buXaSB0cnV5IHbhuqVuCiAgICBsb25nIGxvbmcgdG90YWxfcGVyaW1ldGVyID0gMDsKICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IFE7ICsraSkgewogICAgICAgIHRvdGFsX3BlcmltZXRlciArPSBkZWx0YV9hbnNbaV07CiAgICAgICAgY291dCA8PCB0b3RhbF9wZXJpbWV0ZXIgPDwgKGkgPT0gUSA/ICIiIDogIiAiKTsKICAgIH0KICAgIGNvdXQgPDwgZW5kbDsKCiAgICByZXR1cm4gMDsKfQo=