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