#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; } |