可以直接前缀求和枚举点,也可以直接双指针
#include<iostream>
using namespace std;
long long a[4000010];
int n,k;
long long ma;
int main()
{
cin>>n>>k;
for(int i=1;i<=n;i++)
{
long long g,x;
cin>>g>>x;
ma=max(ma,x);
a[x]=g;
}
for(int i=1;i<4000001;i++)
{
a[i]=a[i-1]+a[i];
}
long long res=0;
k=k*2+1;
for(int i=4000001;i>=k-1;i--)
res=max(res,a[i]-a[i-k]);
cout<<res;
}