代码在下面 longlong 也开了 和标程对拍一直没问题. . 哪位dalao看看有什么问题..
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define uint unsigned int
using namespace std;
const int maxn=200000+10;
long long maxx[maxn*4],addv[maxn*4];
long long l,r;
struct T{
long long x,c;
long long y;
bool operator<(const T &a)const{
return x<a.x;
}
}A[maxn];
long long y[maxn];
long long tot=0;
long long L[maxn];
long long hash[maxn];
inline long long bs(long long x){
long long ll=1,rr=tot;
while(ll+1<rr){
long long mid=(ll+rr)>>1;
if(hash[mid]>=x)
rr=mid;
else ll=mid+1;
}
if(hash[ll]==x)
return ll;
else return rr;
}
long long ql,qr;
inline void pushdown(long long o){
if(addv[o]){
addv[o<<1]+=addv[o];
addv[o<<1|1]+=addv[o];
maxx[o<<1]+=addv[o];
maxx[o<<1|1]+=addv[o];
addv[o]=0;
}
}
inline void add(long long o,long long l,long long r,long long v){
pushdown(o);
if(ql<=l&&r<=qr){
addv[o]+=v;
maxx[o]+=v;
return ;
}
else if(l!=r){
int mid=(l+r)>>1;
if(ql<=mid)
add(o<<1,l,mid,v);
if(qr>mid)
add(o<<1|1,mid+1,r,v);
maxx[o]=max(maxx[o<<1],maxx[o<<1|1]);
}
}
int main(){
//freopen("a.out","r",stdin);
// freopen("bl.out","w",stdout);
long long n,w,h;
while(cin>>n>>w>>h){
memset(addv,0,sizeof(addv));
memset(maxx,0,sizeof(maxx));
for(long long i=1;i<=n;i++){
cin>>A[i].x>>A[i].y>>A[i].c;
y[i]=A[i].y;
}
if(w==0||h==0){
puts("0");
continue;
}
sort(y+1,y+n+1);
sort(A+1,A+n+1);
hash[++tot]=y[1];
for(long long i=2;i<=n;i++)
if(y[i]!=y[i-1])
hash[++tot]=y[i];
l=1;
for(long long i=1;i<=tot;i++){
while(hash[i]-hash[l]>=h)
l++;
L[i]=l;
}
long long ans=0;
l=1;
for(long long i=1;i<=n;i++){
while(l<i&&A[i].x-A[l].x>=w){
qr=bs(A[l].y);
ql=L[qr];
add(1,1,n,-A[l].c);
l++;
}
qr=bs(A[i].y);
ql=L[qr];
add(1,1,n,A[i].c);
if(maxx[1]>ans)
ans=maxx[1];
}
cout<<ans<<endl;
}
return 0;
}
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define uint unsigned int
using namespace std;
const int maxn=200000+10;
long long maxx[maxn*4],addv[maxn*4];
long long l,r;
struct T{
long long x,c;
long long y;
bool operator<(const T &a)const{
return x<a.x;
}
}A[maxn];
long long y[maxn];
long long tot=0;
long long L[maxn];
long long hash[maxn];
inline long long bs(long long x){
long long ll=1,rr=tot;
while(ll+1<rr){
long long mid=(ll+rr)>>1;
if(hash[mid]>=x)
rr=mid;
else ll=mid+1;
}
if(hash[ll]==x)
return ll;
else return rr;
}
long long ql,qr;
inline void pushdown(long long o){
if(addv[o]){
addv[o<<1]+=addv[o];
addv[o<<1|1]+=addv[o];
maxx[o<<1]+=addv[o];
maxx[o<<1|1]+=addv[o];
addv[o]=0;
}
}
inline void add(long long o,long long l,long long r,long long v){
pushdown(o);
if(ql<=l&&r<=qr){
addv[o]+=v;
maxx[o]+=v;
return ;
}
else if(l!=r){
int mid=(l+r)>>1;
if(ql<=mid)
add(o<<1,l,mid,v);
if(qr>mid)
add(o<<1|1,mid+1,r,v);
maxx[o]=max(maxx[o<<1],maxx[o<<1|1]);
}
}
int main(){
//freopen("a.out","r",stdin);
// freopen("bl.out","w",stdout);
long long n,w,h;
while(cin>>n>>w>>h){
memset(addv,0,sizeof(addv));
memset(maxx,0,sizeof(maxx));
for(long long i=1;i<=n;i++){
cin>>A[i].x>>A[i].y>>A[i].c;
y[i]=A[i].y;
}
if(w==0||h==0){
puts("0");
continue;
}
sort(y+1,y+n+1);
sort(A+1,A+n+1);
hash[++tot]=y[1];
for(long long i=2;i<=n;i++)
if(y[i]!=y[i-1])
hash[++tot]=y[i];
l=1;
for(long long i=1;i<=tot;i++){
while(hash[i]-hash[l]>=h)
l++;
L[i]=l;
}
long long ans=0;
l=1;
for(long long i=1;i<=n;i++){
while(l<i&&A[i].x-A[l].x>=w){
qr=bs(A[l].y);
ql=L[qr];
add(1,1,n,-A[l].c);
l++;
}
qr=bs(A[i].y);
ql=L[qr];
add(1,1,n,A[i].c);
if(maxx[1]>ans)
ans=maxx[1];
}
cout<<ans<<endl;
}
return 0;
}