Problem:
MathJax.Hub.Config({ tex2jax: { inlineMath: [["$","$"], ["\\(","\\)"]], processEscapes: true }});

The Maximum Number of Overlaps

Given a set of $N$ axis-aligned rectangular seals, find the number of overlapped seals on the region which has the maximum number of overlapped seals.

Input

The input is given in the following format.

$N$

$x1_1$ $y1_1$ $x2_1$ $y2_1$

$x1_2$ $y1_2$ $x2_2$ $y2_2$

:

$x1_N$ $y1_N$ $x2_N$ $y2_N$

($x1_i, y1_i$) and ($x2_i, y2_i$) are the coordinates of the top-left and the bottom-right corner of the $i$-th seal respectively.

Constraints

$ 1 \leq N \leq 100000 $

$ 0 \leq x1_i < x2_i \leq 1000 $

$ 0 \leq y1_i < y2_i \leq 1000 $

$ x1_i, y1_i, x2_i, y2_i$ are given in integers

Output

Print the maximum number of overlapped seals in a line.

Sample Input 1

2
0 0 3 2
2 1 4 3

Sample Output 1

2

Sample Input 2

2
0 0 2 2
2 0 4 2

Sample Output 2

1

Sample Input 3

3
0 0 2 2
0 0 2 2
0 0 2 2

Sample Output 3

3

Solution in C (judge verdict: Accepted)

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stdint.h> // uint64_t

#define max(a,b) ((a) > (b) ? (a) : (b))
#define min(a,b) ((a) > (b) ? (b) : (a))

int get_int(void) {
  int num;
  scanf("%d", &num);
  return num;
}

int get_int4(int *a1, int *a2, int *a3, int *a4) {
  scanf("%d %d %d %d", a1, a2, a3, a4);
  return 0;
}

#define X_MAX 1000
#define Y_MAX 1000

int main(void) {
    int num = get_int();
    int i, j;

    static int map[X_MAX+1][Y_MAX+1];

    for(i = 0; i < num; i++) {
        int x1, y1, x2, y2;
        get_int4(&x1, &y1, &x2, &y2);
        map[x1][y1]++;
        map[x1][y2]--;
        map[x2][y1]--;
        map[x2][y2]++;
    }

    for(i = 0; i <= X_MAX; i++) {
        for(j = 1; j <= Y_MAX; j++) {
            map[i][j] += map[i][j-1];
        }
    }
    for(i = 1; i <= X_MAX; i++) {
        for(j = 0; j <= Y_MAX; j++) {
            map[i][j] += map[i-1][j];
        }
    }

    int ans = 1;
    for(i = 0; i < X_MAX; i++) {
        for(j = 0; j < Y_MAX; j++) {
            ans = max(ans, map[i][j]);
        }
    }

    printf("%d\n", ans);
    return 0;
}