#include<bits/stdc++.h>
using namespace std;
const int MAXN = 5005;
struct rect
{
int x1, y1, x2, y2, c;
};
rect r[MAXN];
rect cr[MAXN];
int x[MAXN], y[MAXN];
bool grid[MAXN][MAXN];
int h[MAXN];
int l[MAXN], st[MAXN];
int n;
long long solve(int num)
{
if (num == 0) return 0;
int xc = 0, yc = 0;
for (int i = 0; i < num; ++i)
{
x[xc++] = cr[i].x1;
x[xc++] = cr[i].x2;
y[yc++] = cr[i].y1;
y[yc++] = cr[i].y2;
}
sort(x, x + xc);
sort(y, y + yc);
xc = unique(x, x + xc) - x;
yc = unique(y, y + yc) - y;
for (int i = 0; i < yc; ++i)
{
for (int j = 0; j < xc; ++j)
{
grid[i][j] = false;
}
}
for (int i = 0; i < num; ++i)
{
int x1i = lower_bound(x, x + xc, cr[i].x1) - x;
int x2i = lower_bound(x, x + xc, cr[i].x2) - x;
int y1i = lower_bound(y, y + yc, cr[i].y1) - y;
int y2i = lower_bound(y, y + yc, cr[i].y2) - y;
for (int row = y1i; row < y2i; ++row)
{
for (int col = x1i; col < x2i; ++col)
{
grid[row][col] = true;
}
}
}
long long maxarea = 0;
for (int j = 0; j < xc; ++j) h[j] = 0;
for (int i = 0; i < yc - 1; ++i)
{
for (int j = 0; j < xc - 1; ++j)
{
if (grid[i][j])
{
h[j]++;
}
else
{
h[j] = 0;
}
}
int top = 0;
for (int j = 0; j < xc - 1; ++j)
{
while (top > 0 && h[st[top - 1]] >= h[j])
{
top--;
}
l[j] = (top == 0) ? -1 : st[top - 1];
st[top++] = j;
}
top = 0;
for (int j = xc - 2; j >= 0; --j)
{
while (top > 0 && h[st[top - 1]] >= h[j])
{
top--;
}
int right = (top == 0) ? xc - 1 : st[top - 1];
if(h[j] > 0)
{
maxarea = max(maxarea, 1LL * (y[i + 1] - y[i - h[j] + 1]) * (x[right] - x[l[j] + 1]));
}
st[top++] = j;
}
}
return maxarea;
}
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
if (fopen("d5msrect.inp", "r"))
{
freopen("d5msrect.inp", "r", stdin);
freopen("d5msrect.out", "w", stdout);
}
cin >> n;
for (int i = 0; i < n; ++i)
{
cin >> r[i].x1 >> r[i].y1 >> r[i].x2 >> r[i].y2 >> r[i].c;
}
long long ans = 0;
sort(r, r + n, [](const rect& a, const rect& b)
{
return a.c < b.c;
});
int start = 0;
for (int i = 0; i < n; ++i)
{
if (i > 0 && r[i].c != r[i - 1].c)
{
int num = 0;
for (int j = start; j < i; ++j)
{
cr[num++] = r[j];
}
ans = max(ans, solve(num));
start = i;
}
}
int num = 0;
for (int j = start; j < n; ++j)
{
cr[num++] = r[j];
}
ans = max(ans, solve(num));
cout << ans << endl;
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpjb25zdCBpbnQgTUFYTiA9IDUwMDU7CgpzdHJ1Y3QgcmVjdAp7CiAgICBpbnQgeDEsIHkxLCB4MiwgeTIsIGM7Cn07CgpyZWN0IHJbTUFYTl07CnJlY3QgY3JbTUFYTl07CmludCB4W01BWE5dLCB5W01BWE5dOwpib29sIGdyaWRbTUFYTl1bTUFYTl07CmludCBoW01BWE5dOwppbnQgbFtNQVhOXSwgc3RbTUFYTl07CmludCBuOwoKbG9uZyBsb25nIHNvbHZlKGludCBudW0pCnsKICAgIGlmIChudW0gPT0gMCkgcmV0dXJuIDA7CgogICAgaW50IHhjID0gMCwgeWMgPSAwOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW07ICsraSkKICAgIHsKICAgICAgICB4W3hjKytdID0gY3JbaV0ueDE7CiAgICAgICAgeFt4YysrXSA9IGNyW2ldLngyOwogICAgICAgIHlbeWMrK10gPSBjcltpXS55MTsKICAgICAgICB5W3ljKytdID0gY3JbaV0ueTI7CiAgICB9CgogICAgc29ydCh4LCB4ICsgeGMpOwogICAgc29ydCh5LCB5ICsgeWMpOwogICAgeGMgPSB1bmlxdWUoeCwgeCArIHhjKSAtIHg7CiAgICB5YyA9IHVuaXF1ZSh5LCB5ICsgeWMpIC0geTsKCiAgICBmb3IgKGludCBpID0gMDsgaSA8IHljOyArK2kpCiAgICB7CiAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCB4YzsgKytqKQogICAgICAgIHsKICAgICAgICAgICAgZ3JpZFtpXVtqXSA9IGZhbHNlOwogICAgICAgIH0KICAgIH0KCiAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bTsgKytpKQogICAgewogICAgICAgIGludCB4MWkgPSBsb3dlcl9ib3VuZCh4LCB4ICsgeGMsIGNyW2ldLngxKSAtIHg7CiAgICAgICAgaW50IHgyaSA9IGxvd2VyX2JvdW5kKHgsIHggKyB4YywgY3JbaV0ueDIpIC0geDsKICAgICAgICBpbnQgeTFpID0gbG93ZXJfYm91bmQoeSwgeSArIHljLCBjcltpXS55MSkgLSB5OwogICAgICAgIGludCB5MmkgPSBsb3dlcl9ib3VuZCh5LCB5ICsgeWMsIGNyW2ldLnkyKSAtIHk7CgogICAgICAgIGZvciAoaW50IHJvdyA9IHkxaTsgcm93IDwgeTJpOyArK3JvdykKICAgICAgICB7CiAgICAgICAgICAgIGZvciAoaW50IGNvbCA9IHgxaTsgY29sIDwgeDJpOyArK2NvbCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgZ3JpZFtyb3ddW2NvbF0gPSB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGxvbmcgbG9uZyBtYXhhcmVhID0gMDsKICAgIGZvciAoaW50IGogPSAwOyBqIDwgeGM7ICsraikgaFtqXSA9IDA7CgogICAgZm9yIChpbnQgaSA9IDA7IGkgPCB5YyAtIDE7ICsraSkKICAgIHsKICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHhjIC0gMTsgKytqKQogICAgICAgIHsKICAgICAgICAgICAgaWYgKGdyaWRbaV1bal0pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGhbal0rKzsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGhbal0gPSAwOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpbnQgdG9wID0gMDsKICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHhjIC0gMTsgKytqKQogICAgICAgIHsKICAgICAgICAgICAgd2hpbGUgKHRvcCA+IDAgJiYgaFtzdFt0b3AgLSAxXV0gPj0gaFtqXSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdG9wLS07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgbFtqXSA9ICh0b3AgPT0gMCkgPyAtMSA6IHN0W3RvcCAtIDFdOwogICAgICAgICAgICBzdFt0b3ArK10gPSBqOwogICAgICAgIH0KCiAgICAgICAgdG9wID0gMDsKICAgICAgICBmb3IgKGludCBqID0geGMgLSAyOyBqID49IDA7IC0taikKICAgICAgICB7CiAgICAgICAgICAgIHdoaWxlICh0b3AgPiAwICYmIGhbc3RbdG9wIC0gMV1dID49IGhbal0pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRvcC0tOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGludCByaWdodCA9ICh0b3AgPT0gMCkgPyB4YyAtIDEgOiBzdFt0b3AgLSAxXTsKICAgICAgICAgICAgaWYoaFtqXSA+IDApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIG1heGFyZWEgPSBtYXgobWF4YXJlYSwgMUxMICogKHlbaSArIDFdIC0geVtpIC0gaFtqXSArIDFdKSAqICh4W3JpZ2h0XSAtIHhbbFtqXSArIDFdKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgc3RbdG9wKytdID0gajsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gbWF4YXJlYTsKfQoKaW50IG1haW4oKQp7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApOwogICAgY2luLnRpZSgwKTsKICAgIGNvdXQudGllKDApOwogICAgaWYgKGZvcGVuKCJkNW1zcmVjdC5pbnAiLCAiciIpKQogICAgewogICAgICAgIGZyZW9wZW4oImQ1bXNyZWN0LmlucCIsICJyIiwgc3RkaW4pOwogICAgICAgIGZyZW9wZW4oImQ1bXNyZWN0Lm91dCIsICJ3Iiwgc3Rkb3V0KTsKICAgIH0KICAgIGNpbiA+PiBuOwoKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgKytpKQogICAgewogICAgICAgIGNpbiA+PiByW2ldLngxID4+IHJbaV0ueTEgPj4gcltpXS54MiA+PiByW2ldLnkyID4+IHJbaV0uYzsKICAgIH0KCiAgICBsb25nIGxvbmcgYW5zID0gMDsKCiAgICBzb3J0KHIsIHIgKyBuLCBbXShjb25zdCByZWN0JiBhLCBjb25zdCByZWN0JiBiKQogICAgewogICAgICAgIHJldHVybiBhLmMgPCBiLmM7CiAgICB9KTsKCiAgICBpbnQgc3RhcnQgPSAwOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyArK2kpCiAgICB7CiAgICAgICAgaWYgKGkgPiAwICYmIHJbaV0uYyAhPSByW2kgLSAxXS5jKQogICAgICAgIHsKICAgICAgICAgICAgaW50IG51bSA9IDA7CiAgICAgICAgICAgIGZvciAoaW50IGogPSBzdGFydDsgaiA8IGk7ICsraikKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgY3JbbnVtKytdID0gcltqXTsKICAgICAgICAgICAgfQogICAgICAgICAgICBhbnMgPSBtYXgoYW5zLCBzb2x2ZShudW0pKTsKICAgICAgICAgICAgc3RhcnQgPSBpOwogICAgICAgIH0KICAgIH0KCiAgICBpbnQgbnVtID0gMDsKICAgIGZvciAoaW50IGogPSBzdGFydDsgaiA8IG47ICsraikKICAgIHsKICAgICAgICBjcltudW0rK10gPSByW2pdOwogICAgfQogICAgYW5zID0gbWF4KGFucywgc29sdmUobnVtKSk7CgogICAgY291dCA8PCBhbnMgPDwgZW5kbDsKCiAgICByZXR1cm4gMDsKfQo=