社区讨论
萌新妹子初学扫描线WA80pts求调..
P1502窗口的星星参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @lt7aa37x
- 此快照首次捕获于
- 2024/02/29 21:51 2 年前
- 此快照最后确认于
- 2024/03/01 11:40 2 年前
谁能帮忙看看我错哪里了qwq
CPP#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn=1e4+10;
int T,n,w,h,xx[maxn<<1],cnt;
struct p{
int x,y,l,to;
}a[maxn<<1];
int cmp(p u,p v){
if(u.y==v.y){
return u.l>v.l;
}
return u.y<v.y;
}
struct tree{
ll lazy,maxx;
}t[maxn<<2];
void pushup(int rt){
t[rt].maxx=max(t[rt<<1].maxx,t[rt<<1|1].maxx);
}
void pushdown(int rt){
if(t[rt].lazy!=0){
t[rt<<1].maxx+=t[rt].lazy; t[rt<<1|1].maxx+=t[rt].lazy;
t[rt<<1].lazy+=t[rt].lazy; t[rt<<1|1].lazy+=t[rt].lazy;
t[rt].lazy=0;
}
}
void update(int rt,int l,int r,int L,int R,int x){
if(L<=l&&r<=R){
t[rt].lazy+=x; t[rt].maxx+=x;
return;
}
int mid=(l+r)>>1; pushdown(rt);
if(L<=mid){
update(rt<<1,l,mid,L,R,x);
}
if(mid<R){
update(rt<<1|1,mid+1,r,L,R,x);
}
pushup(rt);
}
ll query(int rt,int l,int r,int L,int R){
if(L<=l&&r<=R){
return t[rt].maxx;
}
int mid=(l+r)>>1; pushdown(rt); ll mx=0;
if(L<=mid){
mx=max(mx,query(rt<<1,l,mid,L,R));
}
if(mid<R){
mx=max(mx,query(rt<<1|1,mid+1,r,L,R));
}
return mx;
}
int main(){
std::ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
cin>>T;
while(T--){
ll ans=0;
cin>>n>>w>>h;
for(int i=1;i<=2*n;i++)a[i]={0,0,0};
for(int i=1;i<=2*n;i++)xx[i]=0;
for(int i=1;i<=(n<<2);i++)t[i]={0,0};
for(int i=1;i<=2*n;i+=2){
cin>>a[i].x>>a[i].y>>a[i].l;
a[i+1]=a[i]; a[i+1].y+=h-1; a[i+1].l=-a[i+1].l;
}
sort(a+1,a+1+2*n,cmp);
for(int i=1;i<=2*n;i+=2){
xx[i]=a[i].x; xx[i+1]=a[i+1].x;
}
sort(xx+1,xx+1+2*n); cnt=unique(xx+1,xx+1+2*n)-xx;
for(int i=1;i<=2*n;i++){
a[i].to=upper_bound(xx+1,xx+1+cnt,a[i].x+w-1)-xx-1;
a[i].x=lower_bound(xx+1,xx+1+cnt,a[i].x)-xx;
}
for(int i=1;i<=2*n;i++){
update(1,1,cnt,a[i].x,a[i].to,a[i].l);
ans=max(ans,t[1].maxx);
}
cout<<ans<<'\n';
}
return 0;
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...