萌新刚学oi,MLE求助
查看原帖
萌新刚学oi,MLE求助
295504
Into_qwq楼主2020/9/1 20:52

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;
}
2020/9/1 20:52
加载中...