#pragma warning(disable:4786) #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define MEM(a, b) memset(a, (b), sizeof(a)) #define CLR(a) memset(a, 0, sizeof(a)) #define MAX(a, b) ((a) > (b) ? (a) : (b)) #define MIN(a, b) ((a) < (b) ? (a) : (b)) #define ABS(X) ( (X) > 0 ? (X) : ( -(X) ) ) #define S(X) ( (X) * (X) ) #define SZ(V) (int )V.size() #define FORN(i, n) for(i = 0; i < n; i++) #define FORAB(i, a, b) for(i = a; i <= b; i++) #define ALL(V) V.begin(), V.end() #define IN(A, B, C) ((B) <= (A) && (A) <= (C)) typedef pair PII; typedef pair PDD; typedef vector VI; typedef vector VP; #define AIN(A, B, C) assert(IN(A, B, C)) //typedef int LL; //typedef long long int LL; //typedef __int64 LL; int R, C, K; int field[1003][1003]; int col_height[1003][1003]; PII S[1003]; int width[1003][1003]; int main() { int r, c, i, l, rr, nS, cur, Q, a, b, last; scanf("%d %d %d", &R, &C, &K); AIN(R, 1, 1000); AIN(C, 1, 1000); AIN(K, 1, R * C); while(K--) { scanf("%d %d", &r, &c); AIN(r, 1, R); AIN(c, 1, C); field[r][c] = 1; } for(r = R; r >= 1; r--) { FORAB(c, 1, C) { if(field[r][c] == 1) col_height[r][c] = 0; else col_height[r][c] = col_height[r + 1][c] + 1; } } FORAB(r, 1, R) { nS = 0; S[nS++] = PII(col_height[r][1], 1); FORAB(c, 2, C) { cur = col_height[r][c]; last = c; while(nS && S[nS - 1].first > cur) { width[r][r + S[nS - 1].first - 1] = MAX(width[r][r + S[nS - 1].first - 1], c - S[nS - 1].second); last = S[nS - 1].second; nS--; } if(!nS || S[nS - 1].first < cur) S[nS++] = PII(col_height[r][c], last); } while(nS) { width[r][r + S[nS - 1].first - 1] = MAX(width[r][r + S[nS - 1].first - 1], c - S[nS - 1].second); nS--; } for(rr = R; rr >= r; rr--) width[r][rr] = MAX(width[r][rr], width[r][rr + 1]); FORAB(rr, r, R) width[r][rr] *= (rr - r + 1); } FORAB(l, 2, R) { for(r = 1; r + l - 1 <= R; r++) { width[r][r + l - 1] = MAX(width[r][r + l - 1], width[r][r + l - 2]); width[r][r + l - 1] = MAX(width[r][r + l - 1], width[r + 1][r + l - 1]); } } scanf("%d", &Q); AIN(Q, 1, 1000000); while(Q--) { scanf("%d %d", &a, &b); AIN(a, 1, b); AIN(b, a, R); printf("%d\n", width[a][b]); } return 0; }