#include #include #include using namespace std; int blocked[7000000]; int r, c; int seen[7000000]; int dx[4]{-1,0,1,0}; int dy[4]{0,1,0,-1}; bool can(int sz) { memset(seen, 0, sizeof(seen)); queue q; for(int i = 0; q.size() == 0 && i + sz <= r; i++) { for(int j = 0; q.size() == 0 && j + sz <= c; j++) { if(blocked[(i+sz)*(c+1) + (j+sz)] - blocked[i*(c+1) + j + sz] - blocked[(i+sz)*(c+1) + j] + blocked[i*(c+1) + j] == 0) { q.push(i*(c+1)+j); seen[i*(c+1)+j]++; } } } if(q.size() == 0) return false; while(q.size()) { int curr = q.front(); q.pop(); int rr = curr / (c+1); int cc = curr % (c+1); for(int k = 0; k < 4; k++) { int nr = rr + dx[k]; int nc = cc + dy[k]; if(nr < 0 || nr+sz > r || nc < 0 || nc+sz > c) continue; if(seen[nr*(c+1)+nc]) continue; if(blocked[(nr+sz)*(c+1) + (nc+sz)] - blocked[nr*(c+1) + nc + sz] - blocked[(nr+sz)*(c+1) + nc] + blocked[nr*(c+1) + nc] == 0) { q.push(nr*(c+1)+nc); seen[nr*(c+1)+nc]++; } } } for(int i = 0; i < r; i++) { for(int j = 0; j < c; j++) { if(i) seen[i*(c+1)+j] += seen[i*(c+1)+j-c-1]; if(j) seen[i*(c+1)+j] += seen[i*(c+1)+j-1]; if(i && j) seen[i*(c+1)+j] -= seen[i*(c+1)+j-c-2]; } } for(int i = 1; i <= r; i++) { for(int j = 1; j <= c; j++) { if(blocked[i*(c+1)+j] - blocked[(i-1)*(c+1)+j] - blocked[i*(c+1)+j-1] + blocked[(i-1)*(c+1)+j-1]) continue; int lx = max(i-sz-1, -1); int ly = max(j-sz-1, -1); int rx = i-1; int ry = j-1; int amt = seen[rx*(c+1)+ry]; if(lx >= 0) amt -= seen[lx*(c+1)+ry]; if(ly >= 0) amt -= seen[rx*(c+1)+ly]; if(lx >= 0 && ly >= 0) amt += seen[lx*(c+1)+ly]; if(amt == 0) return false; } } return true; } void solve() { cin >> r >> c; { int n; cin >> n; while(n--) { int x, y; cin >> x >> y; blocked[x*(c+1)+y]++; } for(int i = 1; i <= r; i++) { for(int j = 1; j <= c; j++) { blocked[i*(c+1)+j] += blocked[i*(c+1)+j-c-1]; blocked[i*(c+1)+j] += blocked[i*(c+1)+j-1]; blocked[i*(c+1)+j] -= blocked[i*(c+1)+j-c-2]; } } } int lhs = 0; int rhs = min(r, c); while(lhs < rhs) { int mid = (lhs+rhs+1)/2; if(can(mid)) lhs = mid; else rhs = mid-1; } if(lhs == 0) lhs = -1; cout << lhs << "\n"; } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); solve(); }