#include<bits/stdc++.h> #define mp make_pair #define f first #define s second using namespace std; int n; long long x,y,a,b,c,d,last,h,pot[1000005],podst=29,mod=1000000103,maxx,maxy; bool zlicz[1000005][2]; map<long long,long long>wynikx,wyniky; priority_queue<pair<long long,long long> >qx,qy; void hasz(int x,int lol) { if(zlicz[x][lol])h-=pot[x]; else h+=pot[x]; zlicz[x][lol]=1; h=(h+mod)%mod; } int main() { ios_base::sync_with_stdio(0); cin>>n>>x>>y; pot[0]=1; for(int i=1;i<=n;i++) { pot[i]=pot[i-1]*podst; pot[i]=pot[i]%mod; } qx.push(mp(0,0)); qy.push(mp(0,0)); for(int i=1;i<=n;i++) { cin>>a>>b>>c>>d; qx.push(mp(a,i)); qx.push(mp(c,i)); qy.push(mp(b,i)); qy.push(mp(d,i)); } last=x; while(!qx.empty()) { a=qx.top().f;b=qx.top().s;qx.pop(); wynikx[h]+=last-a; if(wynikx[h]>maxx)maxx=wynikx[h]; hasz(b,0); last=a; } last=y; h=0; while(!qy.empty()) { a=qy.top().f;b=qy.top().s;qy.pop(); wyniky[h]+=last-a; if(wyniky[h]>maxy)maxy=wyniky[h]; hasz(b,1); last=a; } cout<<maxx*maxy<<'\n'; /*cin>>zapy; while(zapy--) { zlicz.clear(); while(!qmax.empty())qmax.pop(); while(!qmin.empty())qmin.pop(); wyn1=0; wyn2=0; cin>>n; for(int i=1;i<=n;i++) { cin>>a>>b>>c; if(zlicz[b]==0){qmax.push(b);qmin.push(-b);} zlicz[b]+=a; if(zlicz[c]==0){qmax.push(c);qmin.push(-c);} zlicz[c]-=a; wyn1+=a*b; wyn2+=a*c; } cout<<wyn1<<' '<<wyn2; if(wyn1==wyn2) { nie=0; while(!qmax.empty()) { if(zlicz[qmax.top()]==0)qmax.pop(); else if(zlicz[qmax.top()]<0) { nie=1; break; } else break; } while(!qmin.empty()) { if(zlicz[-qmin.top()]==0)qmin.pop(); else if(zlicz[-qmin.top()]<0) { nie=1; break; } else break; } if(nie)cout<<"NIE"<<'\n'; else cout<<"TAK"<<'\n'; } else cout<<"NIE"<<'\n'; } */ }
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 105 106 107 | #include<bits/stdc++.h> #define mp make_pair #define f first #define s second using namespace std; int n; long long x,y,a,b,c,d,last,h,pot[1000005],podst=29,mod=1000000103,maxx,maxy; bool zlicz[1000005][2]; map<long long,long long>wynikx,wyniky; priority_queue<pair<long long,long long> >qx,qy; void hasz(int x,int lol) { if(zlicz[x][lol])h-=pot[x]; else h+=pot[x]; zlicz[x][lol]=1; h=(h+mod)%mod; } int main() { ios_base::sync_with_stdio(0); cin>>n>>x>>y; pot[0]=1; for(int i=1;i<=n;i++) { pot[i]=pot[i-1]*podst; pot[i]=pot[i]%mod; } qx.push(mp(0,0)); qy.push(mp(0,0)); for(int i=1;i<=n;i++) { cin>>a>>b>>c>>d; qx.push(mp(a,i)); qx.push(mp(c,i)); qy.push(mp(b,i)); qy.push(mp(d,i)); } last=x; while(!qx.empty()) { a=qx.top().f;b=qx.top().s;qx.pop(); wynikx[h]+=last-a; if(wynikx[h]>maxx)maxx=wynikx[h]; hasz(b,0); last=a; } last=y; h=0; while(!qy.empty()) { a=qy.top().f;b=qy.top().s;qy.pop(); wyniky[h]+=last-a; if(wyniky[h]>maxy)maxy=wyniky[h]; hasz(b,1); last=a; } cout<<maxx*maxy<<'\n'; /*cin>>zapy; while(zapy--) { zlicz.clear(); while(!qmax.empty())qmax.pop(); while(!qmin.empty())qmin.pop(); wyn1=0; wyn2=0; cin>>n; for(int i=1;i<=n;i++) { cin>>a>>b>>c; if(zlicz[b]==0){qmax.push(b);qmin.push(-b);} zlicz[b]+=a; if(zlicz[c]==0){qmax.push(c);qmin.push(-c);} zlicz[c]-=a; wyn1+=a*b; wyn2+=a*c; } cout<<wyn1<<' '<<wyn2; if(wyn1==wyn2) { nie=0; while(!qmax.empty()) { if(zlicz[qmax.top()]==0)qmax.pop(); else if(zlicz[qmax.top()]<0) { nie=1; break; } else break; } while(!qmin.empty()) { if(zlicz[-qmin.top()]==0)qmin.pop(); else if(zlicz[-qmin.top()]<0) { nie=1; break; } else break; } if(nie)cout<<"NIE"<<'\n'; else cout<<"TAK"<<'\n'; } else cout<<"NIE"<<'\n'; } */ } |