社区讨论
芝士猴人,猴人闭嘴,如果你零分并且一分不得
P5490【模板】扫描线 & 矩形面积并参与者 2已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @mjdn5oao
- 此快照首次捕获于
- 2025/12/20 09:50 3 个月前
- 此快照最后确认于
- 2025/12/21 18:40 3 个月前
不妨看看我的代码,因为我的代码也是0分,一分不得,或许可以吸取点经验。
零分求调!
CPP#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,id,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]=(int)(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;
//转格子,us和ly不变,ry本来在前缀和中要加一,和变格子的减一抵消,而dx没有抵消的
a[i].dx--;
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]);
// cout<<"begin:"<<tree[1]<<"\n";
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])*tree[1];
// cout<<i<<","<<itny[i]<<":"<<(itny[i+1]-itny[i])<<"*"<<tree[1]<<"\n";
}
cout<<ans;
return 0;
}
/*
31
2
1 1 5 5
4 4 8 8
begin:0
1,1:3*4
2,4:1*5
3,5:3*2
23
....################
....################
....################
.......#############
###....#############
###....#############
###....#############
####################
####################
####################
*/
回复
共 1 条回复,欢迎继续交流。
正在加载回复...