社区讨论
警示后人,如果你零分并且一分不得
P5490【模板】扫描线 & 矩形面积并参与者 4已保存回复 4
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 4 条
- 当前快照
- 1 份
- 快照标识符
- @mjb9f71q
- 此快照首次捕获于
- 2025/12/18 17:50 3 个月前
- 此快照最后确认于
- 2025/12/20 17:25 3 个月前
不妨看看我的代码哪有问题,我也是0分。
CPP#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,id,len,ans;
int cntx,cnty;
set<int> sx;
set<int> sy;
int itnx[200005],itny[200005];
map<int,int> ntix,ntiy;
struct square{
int ux,ly,dx,ry;
}a[100005];
vector<square> b[200005],e[200005];
int tree[800005];
int lazy[800005];
void push_up(int num,int l,int r)
{
if(l==r)
tree[num]=(lazy[num]!=0);
else if(lazy[num]==0)
tree[num]=tree[num*2]+tree[num*2+1];
else
tree[num]=itnx[r]-itnx[l]+1;
}
void ad(int num,int l,int r,int b,int e,int add)
{
if(b<=l&&r<=e)
{
lazy[num]+=add;
push_up(num,l,r);
return;
}
int mid=(l+r)/2;
if(b<=mid)
ad(num*2,l,mid,b,e,add);
if(mid<e)
ad(num*2+1,mid+1,r,b,e,add);
push_up(num,l,r);
}
signed main()
{
ios::sync_with_stdio(0);
cout.tie(0);cin.tie(0);
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i].ux>>a[i].ly>>a[i].dx>>a[i].ry;
sx.insert(a[i].ux),sx.insert(a[i].dx);
sy.insert(a[i].ly),sy.insert(a[i].ry);
}
for(int i:sx)
itnx[++cntx]=i,ntix[i]=cntx;
for(int i:sy)
itny[++cnty]=i,ntiy[i]=cnty;
for(int i=1;i<=n;i++)
a[i].ux=ntix[a[i].ux],a[i].dx=ntix[a[i].dx];
for(int i=1;i<=n;i++)
a[i].ly=ntiy[a[i].ly],a[i].ry=ntiy[a[i].ry];
for(int i=1;i<=n;i++)
b[a[i].ly].push_back(a[i]),e[a[i].ry].push_back(a[i]);
for(int i=1;i<cnty;i++)
{
for(int j=0;j<b[i].size();j++)
ad(1,1,cntx,b[i][j].ux,b[i][j].dx,1);
for(int j=0;j<e[i].size();j++)
ad(1,1,cntx,e[i][j].ux,e[i][j].dx,-1);
ans+=(itny[i+1]-itny[i]+1)*tree[1];
}
cout<<ans;
return 0;
}
回复
共 4 条回复,欢迎继续交流。
正在加载回复...