#include <bits/stdc++.h> // NeOWami
using namespace std;
// #define int long long
#define ft first
#define sc second
using pii = pair<int, int>;
const int N = 355;
const int K = N * N + 5;
int n, m, k;
pii a[K];
int f[N][N];
int ans[K];
signed main() {
cin.tie(NULL)->sync_with_stdio(false);
if(ifstream("PHITIEU.inp")) {
freopen("PHITIEU.inp", "r", stdin);
freopen("PHITIEU.out", "w", stdout);
}
cin >> n >> m >> k;
for (int i = 1; i <= k; i++) cin >> a[i].ft >> a[i].sc;
for (int i = 1; i <= n; i++) for (int j = 1; j <= m; j++) f[i][j] = k + 1;
for (int i = 1; i <= k; i++) {
int x = a[i].ft, y = a[i].sc;
f[x][y] = min(f[x][y], i);
}
for (int len = 1; len <= min(n, m); len++) {
if (len != 1) {
for (int i = 1; i + len - 1 <= n; i++) {
for (int j = 1; j + len - 1 <= m; j++) {
f[i][j] = min({f[i][j], f[i + 1][j], f[i][j + 1], f[i + 1][j + 1]});
}
}
}
int mx = 1;
for (int i = 1; i + len - 1 <= n; i++) {
for (int j = 1; j + len - 1 <= m; j++) {
mx = max(mx, f[i][j]);
}
}
ans[mx - 1] = max(ans[mx - 1], len);
}
for (int i = k; i >= 1; i--) ans[i] = max(ans[i], ans[i + 1]);
for (int i = 1; i <= k; i++) cout << ans[i] << "\n";
return 0;
}
/*
Gọi d[i][j] là thời gian quả bóng ở ô i j nổ
vậy thời gian mà hình vuông đó không còn chính là min của các ô vuông con
(hay thời gian để hình vuông đang xét bắt đầu tại i, j, độ dài là len không còn là:
min {d[i][j] -> d[i + len - 1][j + len - 1]} )
Nếu cố định độ dài đang xét là len, nếu max thời gian của các hình vuông bằng T
thì có nghĩa là khoảng khắc từ 1 -> (T - 1) sẽ tồn tại hình vuông có độ dài = len thỏa mãn
Vậy với mỗi len thì 1 <= i <= T - 1: ans[i] = max(ans[i], len)
ta có thể dễ dàng xử lý bằng suffix max (dòng 46 và 49)
vậy làm sao để tính nhanh các min các ô vuông từ d[i][j] -> d[i + len - 1][j + len - 1] ?
gọi f[len][i][j] là min của các ô vuông từ d[i][j] -> d[i + len - 1][j + len - 1]
khi đó với 2 <= len <= min(n, m) dễ dàng tính được: f[len][i][j] = min({f[len - 1][i][j],
f[len - 1][i + 1][j],
f[len - 1][i][j + 1],
f[len - 1][i + 1][j + 1]})
(Dòng 35)
(P/S ta không cần lưu chiều len, bằng cách duyệt len từ 1 -> n và chỉ sài mảng f[i][j], ta sẽ tối ưu được bộ nhớ xuống còn n * m)
Vậy độ phức tạp bài này là: O(min(n, m) * n * m) ≈ n ^ 3
*/
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+IC8vIE5lT1dhbWkKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCi8vICNkZWZpbmUgaW50IGxvbmcgbG9uZwojZGVmaW5lIGZ0IGZpcnN0CiNkZWZpbmUgc2Mgc2Vjb25kCnVzaW5nIHBpaSA9IHBhaXI8aW50LCBpbnQ+Owpjb25zdCBpbnQgTiA9IDM1NTsKY29uc3QgaW50IEsgPSBOICogTiArIDU7CgppbnQgbiwgbSwgazsKcGlpIGFbS107CmludCBmW05dW05dOwppbnQgYW5zW0tdOwoKc2lnbmVkIG1haW4oKSB7CiAgICBjaW4udGllKE5VTEwpLT5zeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwogICAgaWYoaWZzdHJlYW0oIlBISVRJRVUuaW5wIikpIHsKICAgICAgICBmcmVvcGVuKCJQSElUSUVVLmlucCIsICJyIiwgc3RkaW4pOwogICAgICAgIGZyZW9wZW4oIlBISVRJRVUub3V0IiwgInciLCBzdGRvdXQpOwogICAgfQogICAgY2luID4+IG4gPj4gbSA+PiBrOwogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gazsgaSsrKSBjaW4gPj4gYVtpXS5mdCA+PiBhW2ldLnNjOwoKICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKykgZm9yIChpbnQgaiA9IDE7IGogPD0gbTsgaisrKSBmW2ldW2pdID0gayArIDE7CiAgICBmb3IgKGludCBpID0gMTsgaSA8PSBrOyBpKyspIHsKICAgICAgICBpbnQgeCA9IGFbaV0uZnQsIHkgPSBhW2ldLnNjOwogICAgICAgIGZbeF1beV0gPSBtaW4oZlt4XVt5XSwgaSk7CiAgICB9CgogICAgZm9yIChpbnQgbGVuID0gMTsgbGVuIDw9IG1pbihuLCBtKTsgbGVuKyspIHsKICAgICAgICBpZiAobGVuICE9IDEpIHsKICAgICAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgKyBsZW4gLSAxIDw9IG47IGkrKykgewogICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDE7IGogKyBsZW4gLSAxIDw9IG07IGorKykgewogICAgICAgICAgICAgICAgICAgIGZbaV1bal0gPSBtaW4oe2ZbaV1bal0sIGZbaSArIDFdW2pdLCBmW2ldW2ogKyAxXSwgZltpICsgMV1baiArIDFdfSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGludCBteCA9IDE7CiAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgKyBsZW4gLSAxIDw9IG47IGkrKykgewogICAgICAgICAgICBmb3IgKGludCBqID0gMTsgaiArIGxlbiAtIDEgPD0gbTsgaisrKSB7CiAgICAgICAgICAgICAgICBteCA9IG1heChteCwgZltpXVtqXSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgYW5zW214IC0gMV0gPSBtYXgoYW5zW214IC0gMV0sIGxlbik7CiAgICB9CgogICAgZm9yIChpbnQgaSA9IGs7IGkgPj0gMTsgaS0tKSBhbnNbaV0gPSBtYXgoYW5zW2ldLCBhbnNbaSArIDFdKTsKICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IGs7IGkrKykgY291dCA8PCBhbnNbaV0gPDwgIlxuIjsKICAgIHJldHVybiAwOwp9CgovKgpH4buNaSBkW2ldW2pdIGzDoCB0aOG7nWkgZ2lhbiBxdeG6oyBiw7NuZyDhu58gw7QgaSBqIG7hu5UKduG6rXkgdGjhu51pIGdpYW4gbcOgIGjDrG5oIHZ1w7RuZyDEkcOzIGtow7RuZyBjw7JuIGNow61uaCBsw6AgbWluIGPhu6dhIGPDoWMgw7QgdnXDtG5nIGNvbgooaGF5IHRo4budaSBnaWFuIMSR4buDIGjDrG5oIHZ1w7RuZyDEkWFuZyB4w6l0IGLhuq90IMSR4bqndSB04bqhaSBpLCBqLCDEkeG7mSBkw6BpIGzDoCBsZW4ga2jDtG5nIGPDsm4gbMOgOgptaW4ge2RbaV1bal0gLT4gZFtpICsgbGVuIC0gMV1baiArIGxlbiAtIDFdfSApCgpO4bq/dSBj4buRIMSR4buLbmggxJHhu5kgZMOgaSDEkWFuZyB4w6l0IGzDoCBsZW4sIG7hur91IG1heCB0aOG7nWkgZ2lhbiBj4bunYSBjw6FjIGjDrG5oIHZ1w7RuZyBi4bqxbmcgVAp0aMOsIGPDsyBuZ2jEqWEgbMOgIGtob+G6o25nIGto4bqvYyB04burIDEgLT4gKFQgLSAxKSBz4bq9IHThu5NuIHThuqFpIGjDrG5oIHZ1w7RuZyBjw7MgxJHhu5kgZMOgaSA9IGxlbiB0aOG7j2EgbcOjbiAKClbhuq15IHbhu5tpIG3hu5dpIGxlbiB0aMOsIDEgPD0gaSA8PSBUIC0gMTogYW5zW2ldID0gbWF4KGFuc1tpXSwgbGVuKSAKdGEgY8OzIHRo4buDIGThu4UgZMOgbmcgeOG7rSBsw70gYuG6sW5nIHN1ZmZpeCBtYXggKGTDsm5nIDQ2IHbDoCA0OSkKCnbhuq15IGzDoG0gc2FvIMSR4buDIHTDrW5oIG5oYW5oIGPDoWMgbWluIGPDoWMgw7QgdnXDtG5nIHThu6sgZFtpXVtqXSAtPiBkW2kgKyBsZW4gLSAxXVtqICsgbGVuIC0gMV0gPwpn4buNaSBmW2xlbl1baV1bal0gbMOgIG1pbiBj4bunYSBjw6FjIMO0IHZ1w7RuZyB04burIGRbaV1bal0gLT4gZFtpICsgbGVuIC0gMV1baiArIGxlbiAtIDFdCmtoaSDEkcOzIHbhu5tpIDIgPD0gbGVuIDw9IG1pbihuLCBtKSBk4buFIGTDoG5nIHTDrW5oIMSRxrDhu6NjOiBmW2xlbl1baV1bal0gPSBtaW4oe2ZbbGVuIC0gMV1baV1bal0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZbbGVuIC0gMV1baSArIDFdW2pdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmW2xlbiAtIDFdW2ldW2ogKyAxXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZltsZW4gLSAxXVtpICsgMV1baiArIDFdfSkKKETDsm5nIDM1KQoKKFAvUyB0YSBraMO0bmcgY+G6p24gbMawdSBjaGnhu4F1IGxlbiwgYuG6sW5nIGPDoWNoIGR1eeG7h3QgbGVuIHThu6sgMSAtPiBuIHbDoCBjaOG7iSBzw6BpIG3huqNuZyBmW2ldW2pdLCB0YSBz4bq9IHThu5FpIMawdSDEkcaw4bujYyBi4buZIG5o4bubIHh14buRbmcgY8OybiBuICogbSkKCgpW4bqteSDEkeG7mSBwaOG7qWMgdOG6oXAgYsOgaSBuw6B5IGzDoDogTyhtaW4obiwgbSkgKiBuICogbSkg4omIIG4gXiAzCiov