#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> ii;
const int INF = 1e9;
const ll LINF = 1e18;
template<typename T>
void minimize(T& a, const T& b) {
if (b < a) a = b;
}
const int N = 1e3 + 5;
int n, m, q;
int a[N][N];
ll sum[N][N];
ll getSum(int x1, int y1, int x2, int y2) {
return sum[x2][y2] - sum[x1 - 1][y2] - sum[x2][y1 - 1] + sum[x1 - 1][y1 - 1];
}
// Trường hợp cắt ngang
ll minHorizontalCut(int x1, int y1, int x2, int y2) {
// Tìm điểm cắt ngang x nhỏ nhất sao cho S1 >= S2
int l = x1, r = x2 - 1, ans_x = x2;
while (l <= r) {
int mid = (l + r) >> 1;
ll S1 = getSum(x1, y1, mid, y2), S2 = getSum(mid + 1, y1, x2, y2);
if (S1 >= S2) {
ans_x = mid;
r = mid - 1;
}
else {
l = mid + 1;
}
}
ll ans = LINF;
if (ans_x < x2) {
ll S1 = getSum(x1, y1, ans_x, y2), S2 = getSum(ans_x + 1, y1, x2, y2);
minimize(ans, S1 - S2);
}
if (ans_x - 1 >= x1) { // điểm cắt ngang x lớn nhất sao cho S1 < S2
ll S1 = getSum(x1, y1, ans_x - 1, y2), S2 = getSum(ans_x, y1, x2, y2);
minimize(ans, S2 - S1);
}
return ans;
}
// Trường hợp cắt dọc
ll minVerticalCut(int x1, int y1, int x2, int y2) {
// Tìm điểm cắt dọc y nhỏ nhất sao cho S1 >= S2
int l = y1, r = y2 - 1, ans_y = y2;
while (l <= r) {
int mid = (l + r) >> 1;
ll S1 = getSum(x1, y1, x2, mid), S2 = getSum(x1, mid + 1, x2, y2);
if (S1 >= S2) {
ans_y = mid;
r = mid - 1;
}
else {
l = mid + 1;
}
}
ll ans = LINF;
if (ans_y < y2) {
ll S1 = getSum(x1, y1, x2, ans_y), S2 = getSum(x1, ans_y + 1, x2, y2);
minimize(ans, S1 - S2);
}
if (ans_y - 1 >= y1) { // điểm cắt dọc y lớn nhất sao cho S1 < S2
ll S1 = getSum(x1, y1, x2, ans_y - 1), S2 = getSum(x1, ans_y, x2, y2);
minimize(ans, S2 - S1);
}
return ans;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n >> m >> q;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) cin >> a[i][j];
}
for (int x = 1; x <= n; x++) {
for (int y = 1; y <= m; y++) {
sum[x][y] = sum[x - 1][y] + sum[x][y - 1] - sum[x - 1][y - 1] + a[x][y];
}
}
while (q--) {
int x1, y1, x2, y2;
cin >> x1 >> y1 >> x2 >> y2;
ll ans = min(minHorizontalCut(x1, y1, x2, y2), minVerticalCut(x1, y1, x2, y2));
cout << ans << '\n';
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+IAoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsgIAoKdHlwZWRlZiBsb25nIGxvbmcgbGw7ICAKdHlwZWRlZiBwYWlyPGludCwgaW50PiBpaTsgIAoKY29uc3QgaW50IElORiA9IDFlOTsgIApjb25zdCBsbCBMSU5GID0gMWUxODsgIAoKdGVtcGxhdGU8dHlwZW5hbWUgVD4Kdm9pZCBtaW5pbWl6ZShUJiBhLCBjb25zdCBUJiBiKSB7CglpZiAoYiA8IGEpIGEgPSBiOyAKfQoKY29uc3QgaW50IE4gPSAxZTMgKyA1OyAKCmludCBuLCBtLCBxOyAgCmludCBhW05dW05dOyAKbGwgc3VtW05dW05dOyAKCmxsIGdldFN1bShpbnQgeDEsIGludCB5MSwgaW50IHgyLCBpbnQgeTIpIHsKCXJldHVybiBzdW1beDJdW3kyXSAtIHN1bVt4MSAtIDFdW3kyXSAtIHN1bVt4Ml1beTEgLSAxXSArIHN1bVt4MSAtIDFdW3kxIC0gMV07IAp9CgovLyBUcsaw4budbmcgaOG7o3AgY+G6r3QgbmdhbmcKbGwgbWluSG9yaXpvbnRhbEN1dChpbnQgeDEsIGludCB5MSwgaW50IHgyLCBpbnQgeTIpIHsKCS8vIFTDrG0gxJFp4buDbSBj4bqvdCBuZ2FuZyB4IG5o4buPIG5o4bqldCBzYW8gY2hvIFMxID49IFMyCglpbnQgbCA9IHgxLCByID0geDIgLSAxLCBhbnNfeCA9IHgyOyAgCgl3aGlsZSAobCA8PSByKSB7CgkJaW50IG1pZCA9IChsICsgcikgPj4gMTsgCgkJbGwgUzEgPSBnZXRTdW0oeDEsIHkxLCBtaWQsIHkyKSwgUzIgPSBnZXRTdW0obWlkICsgMSwgeTEsIHgyLCB5Mik7IAoJCQoJCWlmIChTMSA+PSBTMikgewoJCQlhbnNfeCA9IG1pZDsgICAKCQkJciA9IG1pZCAtIDE7IAoJCX0KCQllbHNlIHsKCQkJbCA9IG1pZCArIDE7IAoJCX0KCX0KCglsbCBhbnMgPSBMSU5GOyAKCWlmIChhbnNfeCA8IHgyKSB7CgkJbGwgUzEgPSBnZXRTdW0oeDEsIHkxLCBhbnNfeCwgeTIpLCBTMiA9IGdldFN1bShhbnNfeCArIDEsIHkxLCB4MiwgeTIpOyAKCQltaW5pbWl6ZShhbnMsIFMxIC0gUzIpOyAKCX0KCWlmIChhbnNfeCAtIDEgPj0geDEpIHsgLy8gxJFp4buDbSBj4bqvdCBuZ2FuZyB4IGzhu5tuIG5o4bqldCBzYW8gY2hvIFMxIDwgUzIKCQlsbCBTMSA9IGdldFN1bSh4MSwgeTEsIGFuc194IC0gMSwgeTIpLCBTMiA9IGdldFN1bShhbnNfeCwgeTEsIHgyLCB5Mik7ICAKCQltaW5pbWl6ZShhbnMsIFMyIC0gUzEpOyAKCX0KCglyZXR1cm4gYW5zOyAKfQoKLy8gVHLGsOG7nW5nIGjhu6NwIGPhuq90IGThu41jCmxsIG1pblZlcnRpY2FsQ3V0KGludCB4MSwgaW50IHkxLCBpbnQgeDIsIGludCB5MikgewoJLy8gVMOsbSDEkWnhu4NtIGPhuq90IGThu41jIHkgbmjhu48gbmjhuqV0IHNhbyBjaG8gUzEgPj0gUzIKCWludCBsID0geTEsIHIgPSB5MiAtIDEsIGFuc195ID0geTI7ICAKCXdoaWxlIChsIDw9IHIpIHsKCQlpbnQgbWlkID0gKGwgKyByKSA+PiAxOyAKCQlsbCBTMSA9IGdldFN1bSh4MSwgeTEsIHgyLCBtaWQpLCBTMiA9IGdldFN1bSh4MSwgbWlkICsgMSwgeDIsIHkyKTsgCgoJCWlmIChTMSA+PSBTMikgewoJCQlhbnNfeSA9IG1pZDsgIAoJCQlyID0gbWlkIC0gMTsgCgkJfQoJCWVsc2UgewoJCQlsID0gbWlkICsgMTsgCgkJfQoJfQoKCWxsIGFucyA9IExJTkY7ICAKCWlmIChhbnNfeSA8IHkyKSB7CgkJbGwgUzEgPSBnZXRTdW0oeDEsIHkxLCB4MiwgYW5zX3kpLCBTMiA9IGdldFN1bSh4MSwgYW5zX3kgKyAxLCB4MiwgeTIpOyAKCQltaW5pbWl6ZShhbnMsIFMxIC0gUzIpOwoJfQoJaWYgKGFuc195IC0gMSA+PSB5MSkgeyAvLyDEkWnhu4NtIGPhuq90IGThu41jIHkgbOG7m24gbmjhuqV0IHNhbyBjaG8gUzEgPCBTMgoJCWxsIFMxID0gZ2V0U3VtKHgxLCB5MSwgeDIsIGFuc195IC0gMSksIFMyID0gZ2V0U3VtKHgxLCBhbnNfeSwgeDIsIHkyKTsgCgkJbWluaW1pemUoYW5zLCBTMiAtIFMxKTsgCgl9CgoJcmV0dXJuIGFuczsgCn0KCmludCBtYWluKCkgewoJaW9zOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOyAKCWNpbi50aWUobnVsbHB0cik7IAkKCWNpbiA+PiBuID4+IG0gPj4gcTsgIAoJZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKSB7CgkJZm9yIChpbnQgaiA9IDE7IGogPD0gbTsgaisrKSBjaW4gPj4gYVtpXVtqXTsgCgl9CgoJZm9yIChpbnQgeCA9IDE7IHggPD0gbjsgeCsrKSB7CgkJZm9yIChpbnQgeSA9IDE7IHkgPD0gbTsgeSsrKSB7CgkJCXN1bVt4XVt5XSA9IHN1bVt4IC0gMV1beV0gKyBzdW1beF1beSAtIDFdIC0gc3VtW3ggLSAxXVt5IC0gMV0gKyBhW3hdW3ldOyAKCQl9Cgl9CgoJd2hpbGUgKHEtLSkgewoJCWludCB4MSwgeTEsIHgyLCB5MjsgCgkJY2luID4+IHgxID4+IHkxID4+IHgyID4+IHkyOyAKCgkJbGwgYW5zID0gbWluKG1pbkhvcml6b250YWxDdXQoeDEsIHkxLCB4MiwgeTIpLCBtaW5WZXJ0aWNhbEN1dCh4MSwgeTEsIHgyLCB5MikpOyAJCgkJY291dCA8PCBhbnMgPDwgJ1xuJzsKCX0KfQ==