RT,线段树MLE,希望得到大佬的帮助/kel
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1000005;
int n,x_1,x_2,y_1,y_2,cnt,ans,y[N];
struct lllline{
ll x,l,r,k;
}line[N];
struct node{
int sum,len;
}tree[N*4];
inline int ls(int i){
return i<<1;
}
inline int rs(int i){
return i<<1|1;
}
inline void push_up(int i,int l,int r){
if(tree[i].sum)
tree[i].len=y[r]-y[l];
else
tree[i].len=tree[ls(i)].len+tree[rs(i)].len;
}
inline void add(int i,int l,int r,int nl,int nr,int k){
if(nl>=y[r]&&nr<=y[l]) return;
if(nl<=y[l]&&nr>=y[r]){
tree[i].sum+=k;
push_up(i,l,r);
}
else{
int mid=l+r>>1;
add(ls(i),l,mid,nl,nr,k);
add(rs(i),mid+1,r,nl,nr,k);
push_up(i,l,r);
}
}
inline bool cmp(lllline _x,lllline _y){
return _x.x==_y.x?_x.l>_y.l:_x.x<+_y.x;
}
int main(){
cin>>n;
for(int i=1;i<=n;++i){
cin>>x_1>>y_1>>x_2>>y_2;
line[ls(i)-1].x=x_1,line[ls(i)-1].l=y_1,line[ls(i)-1].r=y_2,line[ls(i)-1].k=1;
line[ls(i)].x=x_2,line[ls(i)].l=y_1,line[ls(i)].r=y_2,line[ls(i)].k=-1;
y[ls(i)-1]=y_1,y[ls(i)]=y_2;
}
n=n*2;
sort(y+1,y+n+1);
sort(line+1,line+n+1,cmp);
for(int i=1;i<=n;++i) if(y[i]!=y[i+1]) y[++cnt]=y[i];
for(int i=1;i<n;++i){
add(1,1,n,line[i].l,line[i].r,line[i].k);
ans+=(line[i+1].x-line[i].x)*tree[1].len;
}
cout<<ans;
return 0;
}