社区讨论
RE求调
P1502窗口的星星参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mj7az2zr
- 此快照首次捕获于
- 2025/12/15 23:22 3 个月前
- 此快照最后确认于
- 2025/12/15 23:23 3 个月前
CPP
#include<bits/stdc++.h>
using namespace std;
const int N=2e4+5;
#define int long long
#define ls p<<1
#define rs p<<1|1
int n,w,h,b[N<<1],cnt,ss,T;
map<int,int> mp;
struct node{
int x,y,w,yy,yh;
}a[N];
bool cmp(node x,node y){
if(x.x!=y.x) return x.x<y.x;
if(x.y!=y.y) return x.y<y.y;
return x.w<y.w;
}
struct tree{
int l,r,s,ma;
}g[N<<2];
void build(int p,int l,int r){
g[p].l=l;
g[p].r=r;
g[p].ma=g[p].s=0;
if(l==r){
return ;
}
int mid=(l+r)>>1;
build(ls,l,mid);
build(rs,mid+1,r);
}
void spread(int p){
if(g[p].s){
g[ls].ma+=g[p].s;
g[rs].ma+=g[p].s;
g[ls].s+=g[p].s;
g[rs].s+=g[p].s;
g[p].s=0;
}
}
void change(int p,int l,int r,int k){
if(l>r) return ;
if(l<=g[p].l&&g[p].r<=r){
g[p].ma+=k;
g[p].s+=k;
return ;
}
spread(p);
int mid=(g[p].l+g[p].r)>>1;
if(l<=mid) change(ls,l,r,k);
if(r>mid) change(rs,l,r,k);
g[p].ma=max(g[ls].ma,g[rs].ma);
}
int ans;
signed main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
cin>>T;
while(T--){
cin>>n>>w>>h;
for(int i=1;i<=n;i++) cin>>a[i].x>>a[i].y>>a[i].w,b[++cnt]=a[i].y,b[++cnt]=a[i].y-h+1;
sort(b+1,b+cnt+1);
sort(a+1,a+n+1,cmp);
for(int i=1;i<=cnt;i++){
if(b[i]!=b[i-1]){
mp[b[i]]=++ss;
}
}
for(int i=1;i<=n;i++){
a[i].yy=mp[a[i].y];
a[i].yh=mp[a[i].y-h+1];
}
build(1,1,cnt);
for(int i=1,j=1;i<=n;i++){
change(1,a[i].yh,a[i].yy,a[i].w);
while(a[j].x+w-1<a[i].x){
change(1,a[j].yh,a[j].yy,-a[j].w);
j++;
}
ans=max(ans,g[1].ma);
}
cout<<ans<<'\n';
for(int i=1;i<=n;i++) mp[b[i]]=0;
}
return 0;
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...