RT
#include <cstdio>
#include <algorithm>
using namespace std;
const int N=2E5+5;
int n,xl,yl,xr,yr,tot,y[N];
struct Line{
int yl,yr,x,in;
}line[N];
bool cmp(const Line& a,const Line& b)
{
return a.x<b.x;
}
struct Node{
int l,r,cnt,len;
}t[N*4];
void build(int root,int l,int r)
{
t[root].l=l,t[root].r=r;
if(l==r)return;
int mid=(l+r)>>1;
build(root*2,l,mid);
build(root*2+1,mid+1,r);
}
inline void pushup(int root)
{
if(t[root].cnt)t[root].len=y[t[root].r+1]-y[t[root].l];
else if(t[root].l==t[root].r)t[root].len=0;
else t[root].len=t[root*2].len+t[root*2+1].len;
}
void modify(int root,int l,int r,int v)
{
if(t[root].l>=l&&t[root].r<=r)
{
t[root].cnt+=v;
pushup(root);
return;
}
int mid=(t[root].l+t[root].r)>>1;
if(l<=mid)modify(root*2,l,r,v);
if(r>mid)modify(root*2+1,l,r,v);
pushup(root);
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d %d %d %d",&xl,&yl,&xr,&yr);
y[++tot]=yl;
line[tot].yl=yl,line[tot].yr=yr,line[tot].x=xl,line[tot].in=1;
y[++tot]=yr;
line[tot].yl=yl,line[tot].yr=yr,line[tot].x=xr,line[tot].in=-1;
}
n=tot;
sort(line+1,line+1+n,cmp);
sort(y+1,y+1+tot);
tot=unique(y+1,y+1+tot)-(y+1);
long long ans=0;
build(1,1,tot-1);
for(int i=1;i<n;i++)
{
int l=lower_bound(y+1,y+1+tot,line[i].yl)-y;
int r=lower_bound(y+1,y+1+tot,line[i].yr)-y;
modify(1,l,r-1,line[i].in);
ans+=(long long)t[1].len*(line[i+1].x-line[i].x);
}
printf("%lld",ans);
}
w7q7