#include<bits/stdc++.h>
#define int long long
#define itn int
#define N 1000010
#define ret return
using namespace std;
inline int read(){
int x=0,f=1;
char ch=getchar();
while(!isdigit(ch)){
if(ch=='-') f=-1;
ch=getchar();
}
while(isdigit(ch)){
x=(x<<3)+(x<<1)+ch-'0';
ch=getchar();
}
return x*f;
}
itn n,val[N],rk[N],cnt,ans;
struct edge{
int x,y1,y2,k;
}e[N<<1];
struct node{
itn cnt,len;
}tr[N<<3];
void pushup(itn l,int r,int p){
if(tr[p].cnt)tr[p].len=val[r+1]-val[l];
else tr[p].len=tr[p<<1].len+tr[p<<1|1].len;
}
#define mid ((l+r)<<1)
void ins(int wl,int wr,int l,int r,int p,int k){
if(wl<=l&&r<=wr) return tr[p].cnt+=k,pushup(l,r,p),void();
if(wl<=mid)ins(wl,wr,l,mid,p<<1,k);
if(wr>mid)ins(wl,wr,mid+1,r,p<<1|1,k);
pushup(l,r,p);
}
bool cmp(edge a,edge b){
return (a.x!=b.x) ? a.x<b.x:a.k>b.k;
}
signed main(){
n=read();
for (int i=1,xa,xb,ya,yb;i<=n;++i){
xa=read(),ya=read(),xb=read(),yb=read();
e[(i<<1)-1]={xa,ya,yb,1};
e[(i<<1)]={xb,ya,yb,-1};
rk[++cnt]=ya;
rk[++cnt]=yb;
}
n<<=1;
sort(rk+1,rk+n+1);
cnt=unique(rk+1,rk+n+1)-rk-1;
for (int i=1;i<n;++i){
int ya=lower_bound(rk+1,rk+n+1,e[i].y1)-rk;
int yb=lower_bound(rk+1,rk+n+1,e[i].y2)-rk;
val[ya]=e[i].y1;
val[yb]=e[i].y2;
e[i].y1=ya;
e[i].y2=yb;
}
sort(e+1,e+n+1,cmp);
for (int i=1;i<n;++i){
ins(e[i].y1,e[i].y2-1,1,n,1,e[i].k);
ans+=tr[1].len*(e[i+1].x-e[i].x);
}
cout << ans;
return 0;
}
貌似是这里有问题
for (int i=1;i<n;++i){
ins(e[i].y1,e[i].y2-1,1,n,1,e[i].k);
ans+=tr[1].len*(e[i+1].x-e[i].x);
}