#include <bits/stdc++.h>
#define ll long long
#define ld long double
#define fi first
#define se second
#define pii pair <int, int>
#define pli pair <ll, int>
#define pll pair <ll, ll>
#define ppi pair <pii, pii>
#define ppii pair <pii, pii>
#define ppli pair <pli, pli>
#define ppll pair <pli, pll>
using namespace std;
const ll MIN_INF = -(1ll<<61);
template <typename T>
ostream & operator << (ostream &out, const vector <T> &V) {
if (!V.empty()) {
out << "{";
for (auto v : V)
out << v << ", ";
out << "\b\b}"; // \b is backspace
}
else {
out << "{}";
}
return out;
}
template <class T1, class T2>
ostream & operator << (ostream &out, const pair <T1, T2> &P) {
out << "{" << P.first << ", " << P.second << "}";
return out;
}
void testcase_ter() {
int n, x0, y0;
cin >> n >> x0 >> y0;
vector <ppi> P(n); vector <int> X(2*n), Y(2*n);
for (int i = 0; i < n; i++) {
cin >> P[i].fi.fi >> P[i].fi.se >> P[i].se.fi >> P[i].se.se;
X[2*i] = P[i].fi.fi;
X[2*i+1] = P[i].se.fi;
Y[2*i] = P[i].fi.se;
Y[2*i+1] = P[i].se.se;
}
vector <int> PX(2 * n, 1), PY(2 * n, 1);
sort (X.begin(), X.end());
int ex = unique(X.begin(), X.end()) - X.begin();
for (int i = 0; i+1 < ex; i++) {
PX[i] = X[i+1] - X[i];
}
PX[ex-1] = x0 - X[ex-1] + X[0];
sort (Y.begin(), Y.end());
int ey = unique(Y.begin(), Y.end()) - Y.begin();
for (int i = 0; i+1 < ey; i++) {
PY[i] = Y[i+1] - Y[i];
}
PY[ey-1] = y0 - Y[ey-1] + Y[0];
for (int i = 0; i < n; i++) {
P[i].fi.fi = lower_bound(X.begin(), X.end(), P[i].fi.fi) - X.begin();
P[i].se.fi = lower_bound(X.begin(), X.end(), P[i].se.fi) - X.begin();
P[i].fi.se = lower_bound(Y.begin(), Y.end(), P[i].fi.se) - Y.begin();
P[i].se.se = lower_bound(Y.begin(), Y.end(), P[i].se.se) - Y.begin();
//cout << P[i] <<endl;
}
//cout << PX << "\n" << PY <<endl;
ll ans = 1;
unordered_map < string, ll > M;
for (int i = 0; i < ex; i++) {
for (int j = 0; j < ey; j++) {
string s;
for (int k = 0; k < n; k++) {
int x1 = min(P[k].fi.fi, P[k].se.fi), x2 = max(P[k].fi.fi, P[k].se.fi);
int y1 = min(P[k].fi.se, P[k].se.se), y2 = max(P[k].fi.se, P[k].se.se);
int t = 0;
if (x1 <= i && i < x2) {
t += 1;
}
if (y1 <= j && j < y2) {
t += 2;
}
s.push_back('0' + t);
}
M[s] += 1ll * PX[i] * PY[j];
ans = max(ans, M[s]);
}
}
cout << ans <<endl;
}
int main()
{
ios_base::sync_with_stdio(false), cin.tie(0), cout.tie(0);
int T = 1;
//cin >> T;
for (int t = 0; t < T; t++) {
testcase_ter();
}
return 0;
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 | #include <bits/stdc++.h> #define ll long long #define ld long double #define fi first #define se second #define pii pair <int, int> #define pli pair <ll, int> #define pll pair <ll, ll> #define ppi pair <pii, pii> #define ppii pair <pii, pii> #define ppli pair <pli, pli> #define ppll pair <pli, pll> using namespace std; const ll MIN_INF = -(1ll<<61); template <typename T> ostream & operator << (ostream &out, const vector <T> &V) { if (!V.empty()) { out << "{"; for (auto v : V) out << v << ", "; out << "\b\b}"; // \b is backspace } else { out << "{}"; } return out; } template <class T1, class T2> ostream & operator << (ostream &out, const pair <T1, T2> &P) { out << "{" << P.first << ", " << P.second << "}"; return out; } void testcase_ter() { int n, x0, y0; cin >> n >> x0 >> y0; vector <ppi> P(n); vector <int> X(2*n), Y(2*n); for (int i = 0; i < n; i++) { cin >> P[i].fi.fi >> P[i].fi.se >> P[i].se.fi >> P[i].se.se; X[2*i] = P[i].fi.fi; X[2*i+1] = P[i].se.fi; Y[2*i] = P[i].fi.se; Y[2*i+1] = P[i].se.se; } vector <int> PX(2 * n, 1), PY(2 * n, 1); sort (X.begin(), X.end()); int ex = unique(X.begin(), X.end()) - X.begin(); for (int i = 0; i+1 < ex; i++) { PX[i] = X[i+1] - X[i]; } PX[ex-1] = x0 - X[ex-1] + X[0]; sort (Y.begin(), Y.end()); int ey = unique(Y.begin(), Y.end()) - Y.begin(); for (int i = 0; i+1 < ey; i++) { PY[i] = Y[i+1] - Y[i]; } PY[ey-1] = y0 - Y[ey-1] + Y[0]; for (int i = 0; i < n; i++) { P[i].fi.fi = lower_bound(X.begin(), X.end(), P[i].fi.fi) - X.begin(); P[i].se.fi = lower_bound(X.begin(), X.end(), P[i].se.fi) - X.begin(); P[i].fi.se = lower_bound(Y.begin(), Y.end(), P[i].fi.se) - Y.begin(); P[i].se.se = lower_bound(Y.begin(), Y.end(), P[i].se.se) - Y.begin(); //cout << P[i] <<endl; } //cout << PX << "\n" << PY <<endl; ll ans = 1; unordered_map < string, ll > M; for (int i = 0; i < ex; i++) { for (int j = 0; j < ey; j++) { string s; for (int k = 0; k < n; k++) { int x1 = min(P[k].fi.fi, P[k].se.fi), x2 = max(P[k].fi.fi, P[k].se.fi); int y1 = min(P[k].fi.se, P[k].se.se), y2 = max(P[k].fi.se, P[k].se.se); int t = 0; if (x1 <= i && i < x2) { t += 1; } if (y1 <= j && j < y2) { t += 2; } s.push_back('0' + t); } M[s] += 1ll * PX[i] * PY[j]; ans = max(ans, M[s]); } } cout << ans <<endl; } int main() { ios_base::sync_with_stdio(false), cin.tie(0), cout.tie(0); int T = 1; //cin >> T; for (int t = 0; t < T; t++) { testcase_ter(); } return 0; } |
English