#include <bits/stdc++.h>
using namespace std;
const int N=1e5+5;
struct node{int l,r,mini,mincnt,len,tag1,tag2;long long sum;};
struct rect{int l,r,x,cnt;};
int n,tot,mem[N<<1];
node tr[N<<3];
rect pr[N<<1];
set<int> s;
long long ans1,ans2;
inline bool cmp(rect a,rect b){return a.x<b.x;}
void build(int p,int l,int r){
tr[p].l=l,tr[p].r=r,tr[p].mini=tr[p].sum=0,tr[p].mincnt=r-l+1,tr[p].len=mem[tr[p].r]-mem[tr[p].l]+1;
if(l==r) return;
int mid(l+r>>1);
build(p<<1,l,mid),build(p<<1|1,mid+1,r);
}
inline void pushdown(int p){
if(tr[p].tag1){
tr[p<<1].mini+=tr[p].tag1,tr[p<<1|1].mini+=tr[p].tag1;
tr[p<<1].tag1+=tr[p].tag1,tr[p<<1|1].tag1+=tr[p].tag1;
tr[p].tag1=0;
}
if(tr[p].tag2){
tr[p<<1].sum=tr[p<<1].len-tr[p<<1].sum;
tr[p<<1|1].sum=tr[p<<1|1].len-tr[p<<1|1].sum;
tr[p].tag2=0;
}
}
inline void pushup(int p){
if(tr[p<<1].mini<tr[p<<1|1].mini) tr[p].mini=tr[p<<1].mini,tr[p].mincnt=tr[p<<1].mincnt;
else if(tr[p<<1].mini>tr[p<<1|1].mini) tr[p].mini=tr[p<<1|1].mini,tr[p].mincnt=tr[p<<1|1].mincnt;
else tr[p].mini=tr[p<<1].mini,tr[p].mincnt=tr[p<<1].mincnt+tr[p<<1|1].mincnt;
tr[p].sum=tr[p<<1].sum+tr[p<<1|1].sum;
}
void upd(int p,int l,int r,int idx){
if(l<=mem[tr[p].l]&&mem[tr[p].r]<=r){
tr[p].mini+=idx,tr[p].tag1+=idx;
tr[p].sum=tr[p].len-tr[p].sum,tr[p].tag2^=1;
return;
}
pushdown(p);
int mid(tr[p].l+tr[p].r>>1);
if(l<=mem[mid]) upd(p<<1,l,r,idx);
if(mem[mid]<r) upd(p<<1|1,l,r,idx);
pushup(p);
}
inline long long query(){return tr[1].mini?tr[1].len:(tr[1].len-tr[1].mincnt);}
int main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
cin >> n;
for(int i(0),l,b,r,t;i<n;++i){
cin >> l >> b >> r >> t;
pr[i<<1].l=pr[i<<1|1].l=b,pr[i<<1].r=pr[i<<1|1].r=t;
pr[i<<1].cnt=1;
pr[i<<1].x=l,pr[i<<1|1].x=r;
s.insert(b),s.insert(t-1);
}
sort(pr,pr+(n<<1),cmp);
for(auto it(s.begin());it!=s.end();++it) mem[++tot]=(*it);
build(1,1,tot);
for(int i(0);i<(n<<1);++i){
if(i&&pr[i].x!=pr[i-1].x) ans1+=query()*(pr[i].x-pr[i-1].x),ans2+=tr[1].sum*(pr[i].x-pr[i-1].x);
upd(1,pr[i].l,pr[i].r-1,(pr[i].cnt<<1)-1);
}
cout << ans2 << '\n' << ans1-ans2;
return 0;
}
rt
其中 ans1 求的是所有面积的并,ans2 求的是奇数个矩形覆盖的面积。