用户:
爵士OIer查看:0 回复:0 评论:0 创建时间:2020-09-26T20:11:07
众所周知,扫描线是需要离散化+线段树的。
现在我想不用线段树来实现扫描线,于是写了这份代码:
#include<bits/stdc++.h>
using namespace std;
struct node{long long x1,y1,x2,y2;}r[20005];
long long n,ans;
long long x[20005],y[20005];
bool p[20005][20005];
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>r[i].x1>>r[i].y1>>r[i].x2>>r[i].y2;
x[i*2]=r[i].x1;x[i*2-1]=r[i].x2;
y[i*2]=r[i].y1;y[i*2-1]=r[i].y2;
}
sort(x+1,x+n*2+1);
sort(y+1,y+n*2+1);
for(int i=1;i<=n;i++)
for(int xx=1;xx<n*2;xx++){
if(r[i].x2<=x[xx])break;
if(r[i].x1>=x[xx+1])continue;
for(int yy=1;yy<n*2;yy++){
if(r[i].y2<=x[yy])break;
if(r[i].y1>=x[yy+1])continue;
p[xx][yy]=1;
}
}
for(int xx=1;xx<n*2;xx++){
long long s=x[xx+1]-x[xx];
for(int yy=1;yy<n*2;yy++)
if(p[xx][yy])ans+=s*(y[yy+1]-y[yy]);
}
cout<<ans;
return 0;
}
发现过不了,然后各种卡常,各种玄学优化,然后还是过不了。
有人能帮我一起调一下吗?