https://www.luogu.com.cn/record/228134918
#include<iostream>
#include<algorithm>
#include<cstring>
#define int long long
#define lc (x<<1)
#define rc (x<<1|1)
using namespace std;
const int MAXN=1e4+5;
int t,n,w,h,ans,y[MAXN<<1],tr[MAXN<<3],f[MAXN<<3];
struct xy{
int x1,y1,x2,y2,h;
}a[MAXN];
struct node{
int x,l,r,v;
bool operator<(const node& b)const{
if(x!=b.x)return x<b.x;
return v>b.v;
}
}s[MAXN<<1];
void recover(int x,int l,int r){
tr[x]=tr[lc]+tr[rc];
}
void update(int x,int l,int r,int ql,int qr,int k){
if(ql<=l&&r<=qr){
f[x]+=k;
if(f[x])tr[x]=y[r]-y[l];
else if(l+1==r)tr[x]=0;
else recover(x,l,r);
return;
}
int mid=l+r>>1;
if(ql<mid)update(lc,l,mid,ql,qr,k);
if(qr>mid)update(rc,mid,r,ql,qr,k);
if(!f[x])recover(x,l,r);
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(nullptr),cout.tie(nullptr);
cin>>t;
while(t--){
memset(s,0,sizeof s);
memset(tr,0,sizeof tr);
memset(f,0,sizeof f);
cin>>n>>w>>h;
for(int i=1;i<=n;i++){
cin>>a[i].x1>>a[i].y1>>a[i].h;
a[i].x2=a[i].x1+w-1;
a[i].y2=a[i].y1+h-1;
y[i]=a[i].y1,y[n+i]=a[i].y2;
}
sort(y+1,y+2*n+1);
int sz=unique(y+1,y+2*n+1)-y-1;
for(int i=1;i<=n;i++){
s[i].x=a[i].x1;
s[i].l=lower_bound(y+1,y+sz+1,a[i].y1)-y;
s[i].r=lower_bound(y+1,y+sz+1,a[i].y2)-y;
s[i].v=a[i].h;
s[n+i]=node{a[i].x2,s[i].l,s[i].r,-a[i].h};
}
sort(s+1,s+2*n+1),ans=0;
for(int i=1;i<2*n;i++){
update(1,1,sz,s[i].l,s[i].r,s[i].v);
ans=max(ans,tr[1]);
}
cout<<ans<<endl;
}
return 0;
}