Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <algorithm>
- using namespace std;
- int n,m;
- int map[510][510];
- int q,l,u;
- inline int fits(int i, int j, int k) {
- return map[i+k][j+k]>=l &&
- map[i+k][j+k]<=u;
- }
- inline bool inMap(int i, int j) {
- return i>=0 && i<n && j>=0 && j<m;
- }
- int biggest(int i, int j) {
- int low, beg=0, end=min(n-i,m-j)-1;
- int tmpEnd;
- while (!inMap(i+end-1,j+end-1))
- end++;
- while (inMap(i+end+1,j+end+1))
- end++;
- tmpEnd=end;
- while (beg<end) {
- int mid=(beg+end)/2;
- if (fits(i,j,mid)) end=mid;
- else beg=mid+1;
- }
- if (!fits(i,j,beg))
- return 0;
- low=beg;
- beg=0, end=tmpEnd;
- while (beg<end) {
- int mid=(beg+end+1)/2;
- if (fits(i,j,mid)) beg=mid;
- else end=mid-1;
- }
- return beg-low+1;
- }
- int main() {
- while (1) {
- scanf("%d %d", &n,&m);
- if (!n && !m)
- break;
- for (int i=0; i<n; i++)
- for (int j=0; j<m; j++)
- scanf("%d", &map[i][j]);
- scanf("%d", &q);
- while (q--) {
- scanf("%d %d", &l,&u);
- int big=0;
- for (int i=0; i<n; i++)
- big=max(big,biggest(i,0));
- for (int i=0; i<m; i++)
- big=max(big,biggest(0,i));
- printf("%d\n", big);
- }
- printf("-\n");
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement