我的代码用 C++14 编译会 TLE ,C++14(GCC 9) 编译会 AC ,求大佬解答
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=2e6+20;
int n,W,H,tot,tot1,sy[N];
struct xian{
int x,yl,yh,c;
}ss[N<<2];
bool cmp(const xian &cx,const xian &cy) {
if(cx.x==cy.x)return cx.c<cy.c;
return cx.x<cy.x;
}
struct Seg{
int mx,tg;
}t[N<<2];
#define lc (p<<1)
#define rc ((p<<1)|1)
void pushup(int p) {
t[p].mx=max(t[lc].mx,t[rc].mx);
}
void pushdown(int p) {
if(t[p].tg) {
t[lc].tg+=t[p].tg;t[rc].tg+=t[p].tg;
t[lc].mx+=t[p].tg;t[rc].mx+=t[p].tg;
t[p].tg=0;
}
}
void build(int p=1,int l=1,int r=n) {
t[p].tg=t[p].mx=0;
if(l==r)return ;
int mid=(l+r)>>1;
build(lc,l,mid);build(rc,mid+1,r);
pushup(p);
}
void upd(int p,int L,int R,int del,int l=1,int r=n) {
if(l>=L&&r<=R) {
t[p].mx+=del;t[p].tg+=del;
return ;
}
pushdown(p);int mid=(l+r)>>1;
if(mid>=L)upd(lc,L,R,del,l,mid);
if(mid<R)upd(rc,L,R,del,mid+1,r);
pushup(p);
}
signed main(){
int T;scanf("%d",&T);
while(T--) {
tot=0;tot1=0;
scanf("%lld%lld%lld",&n,&W,&H);
for(int i=1;i<=n;++i) {
int xx,yy,cc;scanf("%lld%lld%lld",&xx,&yy,&cc);
ss[++tot].c=cc;ss[tot].x=xx;ss[tot].yl=yy;ss[tot].yh=yy+H-1;
sy[++tot1]=yy;
ss[++tot].c=-cc;ss[tot].x=xx+W;ss[tot].yl=yy;ss[tot].yh=yy+H-1;
sy[++tot1]=yy+H-1;
}
sort(sy+1,sy+1+tot1);
int len=unique(sy+1,sy+1+tot1)-sy-1;
sort(ss+1,ss+1+tot,cmp);
n=len;
build();
int ans=0;
for(int i=1;i<=tot;++i) {
ss[i].yl=lower_bound(sy+1,sy+1+len,ss[i].yl)-sy;
ss[i].yh=lower_bound(sy+1,sy+1+len,ss[i].yh)-sy;
upd(1,ss[i].yl,ss[i].yh,ss[i].c);
ans=max(ans,t[1].mx);
}
printf("%lld\n",ans);
}
return 0;
}