#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'; } */ } |
English