这题做法应该挺多的,一个比较简单的直接思路就是双指针跑一下吧?
反正我是双指针跑一下就wa了
wa哪里了呢,满怀期待的我下载了第一个样例~~
好吧w可以等于0
特判一下-------->Ac啦~~~
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<stack>
#include<vector>
#define ll long long
#define inf 0x3f3f3f3f
using namespace std;
const int maxn=100005;
struct node {
int x,b;
bool operator<(const node &a){
return x<a.x;
}
}mo[maxn];
int main()
{
int n,m,w,i,j,t;
cin>>n>>w;
for(i=0;i<n;i++)
{
cin>>mo[i].x>>mo[i].b;
}
if(w==0){
cout<<0<<endl;
return 0;
}
sort(mo,mo+n);
// for(i=0;i<n;i++)
// {
//// cout<<mo[i].x<<" "<<mo[i].b<<endl;
// }
int ans=0,pre=0,sum=0;
j=0;
for(i=0;i<n;i++)
{
if(i>j) j=i;
if(i==j) {
sum=mo[i].b;
ans=max(ans,sum);
}
while(j+1<n&&abs(mo[i].x-mo[j+1].x)<w)
{
sum+=mo[j+1].b;
ans=max(ans,sum);
j++;
}
sum-=mo[i].b;
// cout<<i<<" "<<j<<" "<<sum<<endl;
}
cout<<ans<<endl;
return 0;
}