//Bài 4
#include <bits/stdc++.h>
using namespace std;
const int INF = 1e9;
int m, n, Q;
vector<vector<int>> a;
struct SquareInfo {
int rows;
int cols;
vector<int> diff;
multiset<int> allDiff;
};
SquareInfo sq[5];
int getId(int k, int r, int c) {
return (r - 1) * sq[k].cols + (c - 1);
}
int calcDiff(int k, int r, int c) {
int mn = INF;
int mx = -INF;
for (int i = r; i < r + k; i++) {
for (int j = c; j < c + k; j++) {
mn = min(mn, a[i][j]);
mx = max(mx, a[i][j]);
}
}
return mx - mn;
}
void build() {
int limit = min(m, n);
for (int k = 1; k <= limit; k++) {
sq[k].rows = m - k + 1;
sq[k].cols = n - k + 1;
int total = sq[k].rows * sq[k].cols;
sq[k].diff.assign(total, 0);
sq[k].allDiff.clear();
for (int r = 1; r <= sq[k].rows; r++) {
for (int c = 1; c <= sq[k].cols; c++) {
int val = calcDiff(k, r, c);
int id = getId(k, r, c);
sq[k].diff[id] = val;
sq[k].allDiff.insert(val);
}
}
}
}
void removeSquare(int k, int r, int c) {
int id = getId(k, r, c);
int oldVal = sq[k].diff[id];
auto it = sq[k].allDiff.find(oldVal);
if (it != sq[k].allDiff.end()) {
sq[k].allDiff.erase(it);
}
}
void addSquare(int k, int r, int c) {
int id = getId(k, r, c);
int newVal = calcDiff(k, r, c);
sq[k].diff[id] = newVal;
sq[k].allDiff.insert(newVal);
}
void updateCell(int x, int y, int val) {
int limit = min(m, n);
for (int k = 1; k <= limit; k++) {
int r1 = max(1, x - k + 1);
int r2 = min(x, m - k + 1);
int c1 = max(1, y - k + 1);
int c2 = min(y, n - k + 1);
for (int r = r1; r <= r2; r++) {
for (int c = c1; c <= c2; c++) {
removeSquare(k, r, c);
}
}
}
a[x][y] = val;
for (int k = 1; k <= limit; k++) {
int r1 = max(1, x - k + 1);
int r2 = min(x, m - k + 1);
int c1 = max(1, y - k + 1);
int c2 = min(y, n - k + 1);
for (int r = r1; r <= r2; r++) {
for (int c = c1; c <= c2; c++) {
addSquare(k, r, c);
}
}
}
}
int query(int T) {
int limit = min(m, n);
int ans = 0;
for (int k = 1; k <= limit; k++) {
if (!sq[k].allDiff.empty()) {
int best = *sq[k].allDiff.begin();
if (best <= T) {
ans = k;
}
}
}
return ans;
}
int main() {
freopen("khuvuonanhsang.inp","r",stdin);
freopen("khuvuonanhsang.out","w",stdout);
cin >> m >> n >> Q;
a.assign(m + 1, vector<int>(n + 1));
for (int i = 1; i <= m; i++) {
for (int j = 1; j <= n; j++) {
cin >> a[i][j];
}
}
build();
while (Q--) {
int type;
cin >> type;
if (type == 1) {
int i, j, X;
cin >> i >> j >> X;
updateCell(i, j, X);
} else {
int T;
cin >> T;
cout << query(T) << '\n';
}
}
return 0;
}
Ly9Cw6BpIDQKI2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpjb25zdCBpbnQgSU5GID0gMWU5OwoKaW50IG0sIG4sIFE7CnZlY3Rvcjx2ZWN0b3I8aW50Pj4gYTsKCnN0cnVjdCBTcXVhcmVJbmZvIHsKICAgIGludCByb3dzOwogICAgaW50IGNvbHM7CiAgICB2ZWN0b3I8aW50PiBkaWZmOwogICAgbXVsdGlzZXQ8aW50PiBhbGxEaWZmOwp9OwoKU3F1YXJlSW5mbyBzcVs1XTsKCmludCBnZXRJZChpbnQgaywgaW50IHIsIGludCBjKSB7CiAgICByZXR1cm4gKHIgLSAxKSAqIHNxW2tdLmNvbHMgKyAoYyAtIDEpOwp9CgppbnQgY2FsY0RpZmYoaW50IGssIGludCByLCBpbnQgYykgewogICAgaW50IG1uID0gSU5GOwogICAgaW50IG14ID0gLUlORjsKCiAgICBmb3IgKGludCBpID0gcjsgaSA8IHIgKyBrOyBpKyspIHsKICAgICAgICBmb3IgKGludCBqID0gYzsgaiA8IGMgKyBrOyBqKyspIHsKICAgICAgICAgICAgbW4gPSBtaW4obW4sIGFbaV1bal0pOwogICAgICAgICAgICBteCA9IG1heChteCwgYVtpXVtqXSk7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiBteCAtIG1uOwp9Cgp2b2lkIGJ1aWxkKCkgewogICAgaW50IGxpbWl0ID0gbWluKG0sIG4pOwoKICAgIGZvciAoaW50IGsgPSAxOyBrIDw9IGxpbWl0OyBrKyspIHsKICAgICAgICBzcVtrXS5yb3dzID0gbSAtIGsgKyAxOwogICAgICAgIHNxW2tdLmNvbHMgPSBuIC0gayArIDE7CgogICAgICAgIGludCB0b3RhbCA9IHNxW2tdLnJvd3MgKiBzcVtrXS5jb2xzOwogICAgICAgIHNxW2tdLmRpZmYuYXNzaWduKHRvdGFsLCAwKTsKICAgICAgICBzcVtrXS5hbGxEaWZmLmNsZWFyKCk7CgogICAgICAgIGZvciAoaW50IHIgPSAxOyByIDw9IHNxW2tdLnJvd3M7IHIrKykgewogICAgICAgICAgICBmb3IgKGludCBjID0gMTsgYyA8PSBzcVtrXS5jb2xzOyBjKyspIHsKICAgICAgICAgICAgICAgIGludCB2YWwgPSBjYWxjRGlmZihrLCByLCBjKTsKICAgICAgICAgICAgICAgIGludCBpZCA9IGdldElkKGssIHIsIGMpOwoKICAgICAgICAgICAgICAgIHNxW2tdLmRpZmZbaWRdID0gdmFsOwogICAgICAgICAgICAgICAgc3Fba10uYWxsRGlmZi5pbnNlcnQodmFsKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfQoKdm9pZCByZW1vdmVTcXVhcmUoaW50IGssIGludCByLCBpbnQgYykgewogICAgaW50IGlkID0gZ2V0SWQoaywgciwgYyk7CiAgICBpbnQgb2xkVmFsID0gc3Fba10uZGlmZltpZF07CgogICAgYXV0byBpdCA9IHNxW2tdLmFsbERpZmYuZmluZChvbGRWYWwpOwogICAgaWYgKGl0ICE9IHNxW2tdLmFsbERpZmYuZW5kKCkpIHsKICAgICAgICBzcVtrXS5hbGxEaWZmLmVyYXNlKGl0KTsKICAgIH0KfQoKdm9pZCBhZGRTcXVhcmUoaW50IGssIGludCByLCBpbnQgYykgewogICAgaW50IGlkID0gZ2V0SWQoaywgciwgYyk7CiAgICBpbnQgbmV3VmFsID0gY2FsY0RpZmYoaywgciwgYyk7CgogICAgc3Fba10uZGlmZltpZF0gPSBuZXdWYWw7CiAgICBzcVtrXS5hbGxEaWZmLmluc2VydChuZXdWYWwpOwp9Cgp2b2lkIHVwZGF0ZUNlbGwoaW50IHgsIGludCB5LCBpbnQgdmFsKSB7CiAgICBpbnQgbGltaXQgPSBtaW4obSwgbik7CgogICAgZm9yIChpbnQgayA9IDE7IGsgPD0gbGltaXQ7IGsrKykgewogICAgICAgIGludCByMSA9IG1heCgxLCB4IC0gayArIDEpOwogICAgICAgIGludCByMiA9IG1pbih4LCBtIC0gayArIDEpOwoKICAgICAgICBpbnQgYzEgPSBtYXgoMSwgeSAtIGsgKyAxKTsKICAgICAgICBpbnQgYzIgPSBtaW4oeSwgbiAtIGsgKyAxKTsKCiAgICAgICAgZm9yIChpbnQgciA9IHIxOyByIDw9IHIyOyByKyspIHsKICAgICAgICAgICAgZm9yIChpbnQgYyA9IGMxOyBjIDw9IGMyOyBjKyspIHsKICAgICAgICAgICAgICAgIHJlbW92ZVNxdWFyZShrLCByLCBjKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBhW3hdW3ldID0gdmFsOwoKICAgIGZvciAoaW50IGsgPSAxOyBrIDw9IGxpbWl0OyBrKyspIHsKICAgICAgICBpbnQgcjEgPSBtYXgoMSwgeCAtIGsgKyAxKTsKICAgICAgICBpbnQgcjIgPSBtaW4oeCwgbSAtIGsgKyAxKTsKCiAgICAgICAgaW50IGMxID0gbWF4KDEsIHkgLSBrICsgMSk7CiAgICAgICAgaW50IGMyID0gbWluKHksIG4gLSBrICsgMSk7CgogICAgICAgIGZvciAoaW50IHIgPSByMTsgciA8PSByMjsgcisrKSB7CiAgICAgICAgICAgIGZvciAoaW50IGMgPSBjMTsgYyA8PSBjMjsgYysrKSB7CiAgICAgICAgICAgICAgICBhZGRTcXVhcmUoaywgciwgYyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9Cn0KCmludCBxdWVyeShpbnQgVCkgewogICAgaW50IGxpbWl0ID0gbWluKG0sIG4pOwogICAgaW50IGFucyA9IDA7CgogICAgZm9yIChpbnQgayA9IDE7IGsgPD0gbGltaXQ7IGsrKykgewogICAgICAgIGlmICghc3Fba10uYWxsRGlmZi5lbXB0eSgpKSB7CiAgICAgICAgICAgIGludCBiZXN0ID0gKnNxW2tdLmFsbERpZmYuYmVnaW4oKTsKCiAgICAgICAgICAgIGlmIChiZXN0IDw9IFQpIHsKICAgICAgICAgICAgICAgIGFucyA9IGs7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIGFuczsKfQoKaW50IG1haW4oKSB7CiAKICAgIGZyZW9wZW4oImtodXZ1b25hbmhzYW5nLmlucCIsInIiLHN0ZGluKTsKICAgIGZyZW9wZW4oImtodXZ1b25hbmhzYW5nLm91dCIsInciLHN0ZG91dCk7CiAgICBjaW4gPj4gbSA+PiBuID4+IFE7CgogICAgYS5hc3NpZ24obSArIDEsIHZlY3RvcjxpbnQ+KG4gKyAxKSk7CgogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbTsgaSsrKSB7CiAgICAgICAgZm9yIChpbnQgaiA9IDE7IGogPD0gbjsgaisrKSB7CiAgICAgICAgICAgIGNpbiA+PiBhW2ldW2pdOwogICAgICAgIH0KICAgIH0KCiAgICBidWlsZCgpOwoKICAgIHdoaWxlIChRLS0pIHsKICAgICAgICBpbnQgdHlwZTsKICAgICAgICBjaW4gPj4gdHlwZTsKCiAgICAgICAgaWYgKHR5cGUgPT0gMSkgewogICAgICAgICAgICBpbnQgaSwgaiwgWDsKICAgICAgICAgICAgY2luID4+IGkgPj4gaiA+PiBYOwoKICAgICAgICAgICAgdXBkYXRlQ2VsbChpLCBqLCBYKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpbnQgVDsKICAgICAgICAgICAgY2luID4+IFQ7CgogICAgICAgICAgICBjb3V0IDw8IHF1ZXJ5KFQpIDw8ICdcbic7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAwOwp9Cg==