//Krzysztof Boryczka #pragma GCC optimize "O3" #include <bits/stdc++.h> using namespace std; typedef long long ll; typedef long double ld; typedef pair<int, int> ii; typedef vector<int> vi; typedef vector<ii> vii; const int inf=0x3f3f3f3f; const ll INF=0x3f3f3f3f3f3f3f3f; #define FOR(i, b, e) for(int i=b; i<=e; i++) #define FORD(i, b, e) for(int i=b; i>=e; i--) #define SIZE(x) ((int)x.size()) #define pb push_back #define st first #define nd second #define sp ' ' #define ent '\n' const int N=1e6+5; ii pkt_x[N], pkt_y[N], pkt[N]; int n, rx, ry, r, maxx, maxy; multiset<int> drugie; vii stos; int dist(int a, int b){ if(a<=b) return b-a; return b-a+r; } bool lie(int val, int a, int b){ if(a<=b) return a<=val && val<=b; return val>=a || val<=b; } int f(int gosc, int ziom){ int v2=ziom; if(!drugie.empty()) v2=*drugie.begin(); if(drugie.lower_bound(gosc)!=drugie.end()) v2=*drugie.lower_bound(gosc); if(!lie(v2, ziom, gosc)) v2=ziom; return dist(ziom, v2); } int licz(){ FOR(i, 1, n) pkt[i+n]={pkt[i].nd, pkt[i].st}; FOR(i, 1, n) drugie.insert(min(pkt[i].st, pkt[i].nd)); sort(pkt+1, pkt+n*2+1); int last=pkt[n*2].st; int pt=1; int ret=0; while(pt<=n*2){ while(pt+1<=n*2 && pkt[pt].st==pkt[pt+1].st){ stos.pb(pkt[pt]); pt++; } stos.pb(pkt[pt]); for(auto &x: stos) drugie.erase(drugie.find(x.st)); int akt=inf, ziom; for(auto &x: stos){ if(dist(x.nd, x.st)<akt){ akt=dist(x.nd, x.st); ziom=x.nd; } } ret=max(ret, dist(last, pkt[pt].st)+f(pkt[pt].st, ziom)); last=pkt[pt].st; pt++; for(auto &x: stos) drugie.insert(x.nd); stos.clear(); } drugie.clear(); return ret; } void solve(){ cin>>n>>rx>>ry; FOR(i, 1, n){ cin>>pkt_x[i].st>>pkt_y[i].st; cin>>pkt_x[i].nd>>pkt_y[i].nd; } FOR(i, 1, n) pkt[i]=pkt_x[i]; r=rx; maxx=licz(); FOR(i, 1, n) pkt[i]=pkt_y[i]; r=ry; maxy=licz(); cout<<(ll)maxx*maxy<<ent; } int main(){ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); // int tt; cin>>tt; // FOR(te, 1, tt) solve(); 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 | //Krzysztof Boryczka #pragma GCC optimize "O3" #include <bits/stdc++.h> using namespace std; typedef long long ll; typedef long double ld; typedef pair<int, int> ii; typedef vector<int> vi; typedef vector<ii> vii; const int inf=0x3f3f3f3f; const ll INF=0x3f3f3f3f3f3f3f3f; #define FOR(i, b, e) for(int i=b; i<=e; i++) #define FORD(i, b, e) for(int i=b; i>=e; i--) #define SIZE(x) ((int)x.size()) #define pb push_back #define st first #define nd second #define sp ' ' #define ent '\n' const int N=1e6+5; ii pkt_x[N], pkt_y[N], pkt[N]; int n, rx, ry, r, maxx, maxy; multiset<int> drugie; vii stos; int dist(int a, int b){ if(a<=b) return b-a; return b-a+r; } bool lie(int val, int a, int b){ if(a<=b) return a<=val && val<=b; return val>=a || val<=b; } int f(int gosc, int ziom){ int v2=ziom; if(!drugie.empty()) v2=*drugie.begin(); if(drugie.lower_bound(gosc)!=drugie.end()) v2=*drugie.lower_bound(gosc); if(!lie(v2, ziom, gosc)) v2=ziom; return dist(ziom, v2); } int licz(){ FOR(i, 1, n) pkt[i+n]={pkt[i].nd, pkt[i].st}; FOR(i, 1, n) drugie.insert(min(pkt[i].st, pkt[i].nd)); sort(pkt+1, pkt+n*2+1); int last=pkt[n*2].st; int pt=1; int ret=0; while(pt<=n*2){ while(pt+1<=n*2 && pkt[pt].st==pkt[pt+1].st){ stos.pb(pkt[pt]); pt++; } stos.pb(pkt[pt]); for(auto &x: stos) drugie.erase(drugie.find(x.st)); int akt=inf, ziom; for(auto &x: stos){ if(dist(x.nd, x.st)<akt){ akt=dist(x.nd, x.st); ziom=x.nd; } } ret=max(ret, dist(last, pkt[pt].st)+f(pkt[pt].st, ziom)); last=pkt[pt].st; pt++; for(auto &x: stos) drugie.insert(x.nd); stos.clear(); } drugie.clear(); return ret; } void solve(){ cin>>n>>rx>>ry; FOR(i, 1, n){ cin>>pkt_x[i].st>>pkt_y[i].st; cin>>pkt_x[i].nd>>pkt_y[i].nd; } FOR(i, 1, n) pkt[i]=pkt_x[i]; r=rx; maxx=licz(); FOR(i, 1, n) pkt[i]=pkt_y[i]; r=ry; maxy=licz(); cout<<(ll)maxx*maxy<<ent; } int main(){ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); // int tt; cin>>tt; // FOR(te, 1, tt) solve(); return 0; } |