P5490。样例没过求调 qwq
#include<bits/stdc++.h>
#define o(x) (x<<1-1)
#define p(x) (x<<1)
#define q(x) (x<<1+1)
using namespace std;
int n;
const int N=1e5+31;
map<double,int> val;
double raw[N<<1];
struct node{ double x,y,z; int k; }a[N<<1];
struct segment_tree{ int l,r,cnt; double len; }t[N<<3];
bool cmp(node u,node v){ return u.x<v.x; }
void bld(int x,int l,int r){
t[x].l=l,t[x].r=r,t[x].cnt=t[x].len=0;
if(l==r) return;
int mid=(t[x].l+t[x].r)>>1;
bld(p(x),l,mid),bld(q(x),mid+1,r);
}
void upd(int x,int l,int r,double v){
if(l<=t[x].l&&t[x].r<=r)
return t[x].len=((t[x].cnt+=v)?raw[t[x].r+1]-raw[t[x].l]:(t[x].l==t[x].r?0:t[p(x)].len+t[q(x)].len)),void();
int mid=(t[x].l+t[x].r)>>1;
if(l<=mid) upd(p(x),l,r,v);
if(r>mid) upd(q(x),l,r,v);
t[x].len=(t[x].cnt?raw[t[x].r+1]-raw[t[x].l]:t[p(x)].len+t[q(x)].len);
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
double yy,zz;
cin>>a[o(i)].x>>yy>>a[p(i)].x>>zz,
raw[o(i)]=a[o(i)].y=a[p(i)].y=yy;
raw[p(i)]=a[o(i)].z=a[p(i)].z=zz;
a[o(i)].k=1,a[p(i)].k=-1;
}
n<<=1;
sort(raw+1,raw+n+1);
int m=unique(raw+1,raw+n+1)-raw-1;
for(int i=1;i<=m;i++) val[raw[i]]=i;
sort(a+1,a+n+1,cmp),bld(1,1,m-1);
double ans=0;
for(int i=1;i<n;i++){
upd(1,val[a[i].y],val[a[i].z]-1,a[i].k);
ans+=t[1].len*(a[i+1].x-a[i].x);
}
cout<<ans;
return 0;
}