2AC8TLE求助
查看原帖
2AC8TLE求助
133116
Xhesika_Frost楼主2020/10/4 16:14

救救孩子

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<map>
using namespace std;
const int maxx=1000000000;
int xiu=1;
int maxxx=1000000000;
int x1,y1,x2,y2;
int n;
int tot;
int ans;
map<int,int> sum,lazy;
struct b{
	int xl;int xr;int y;int f;
}bb[200005];
//int xx[100006];
int p;
bool cmp( b x,b y){
	return x.y<y.y;
}
void pushup(int x,int l,int r){
	if(lazy[x]>=1)
		sum[x]=(r-l+1);
	else
		if(l!=r)
		sum[x]=sum[x<<1]+sum[x<<1|1];
	else
		sum[x]=0;
}
void update(int root,int l,int r,int L,int R,int f){
	if(L<=l&&r<=R){
		lazy[root]+=f;
		pushup(root,l,r);	
		return ;	
	}
	int mid=(l+r)>>1;
	if(L<=mid) update(root<<1,l,mid,L,R,f);
	if(R>mid) update(root<<1|1,mid+1,r,L,R,f);
	pushup(root,l,r);
}
int xm,xmm;
int main(){
	xm=1000000001;
	scanf("%d",&n);
	for(int i=1;i<=n;++i){
		scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
		bb[++p]=(b){x1,x2,y1,1};
		bb[++p]=(b){x1,x2,y2,-1};
		xm=min(xm,x1);
		xmm=max(xmm,x2);
	//	xx[i*2]=x1;
	//	xx[i*2-1]=x2;
	}
	
	sort(bb+1,bb+p+1,cmp);
	//sort(xx+1,xx+p+1);
	 //p=unique(xx+1,xx+1+n+n)-1-xx;
	 n<<=1;
	for(int i=1;i<=n;++i){
	//	cout<<i<<endl;
		
		ans+=(bb[i].y-bb[i-1].y)*sum[1];
		update(1,xm,xmm,bb[i].xl,bb[i].xr-1,bb[i].f);
	}
	cout<<ans;
	return 0;
}

2020/10/4 16:14
加载中...