或者有dalao帮我看一下代码吗
```
#include<bits/stdc++.h>
using namespace std;
int n,d,k,i,l,r,bo,mid,x[600000],s[600000],heap[600000],h[600000],f[600000];
bool pd(int d,int xx)
{
int j,ans,l,r,lenl,lenr,len,mid;
ans=0;
len=0;
lenl=1;
lenr=0;
heap[1]=0;
h[1]=0;
for (j=1;j<=n;j++)
{
while (x[len]>=(x[j]-d-xx)&len<j&x[len]<=x[j]-d+xx)
{
if (lenr-lenl<0)
{
lenr++;
heap[lenr]=x[len];
h[lenr]=f[len];
}
else {
l=lenl; r=lenr;
while (l<=r)
{
mid=(l+r)>>1;
if (h[mid]<f[len]) r=mid-1;
else l=mid+1;
}
if (r<lenl) r=lenl;
while (h[r]>f[len]&r<=lenr) r++;
lenr=r;
heap[lenr]=x[len];
h[lenr]=f[len];
}
len++;
}
while (heap[lenl]<(x[j]-d-xx)|heap[lenl]>(x[j]-d+xx))
{
lenl++;
if (lenl>lenr) break;
}
f[j]=0;
if (lenr-lenl>=0)
{
f[j]=h[lenl]+s[j];
ans=max(ans,f[j]);
}
}
if (ans>=k) return true;
else return false;
}
int main()
{
scanf("%d%d%d",&n,&d,&k);
for (i=1;i<=n;i++)
scanf("%d%d",&x[i],&s[i]);
x[0]=0;s[0]=0;f[0]=0;
l=0; r=1e9; bo=1e9;
while (l<=r)
{
mid=(l+r)>>1;
if (pd(d,mid))
{
bo=min(mid,bo);
r=mid-1;
}
else l=mid+1;
}
if (bo!=1e9) printf("%d",bo);
else printf("%d",-1);
}
```
by chinaxjh @ 2019-06-16 11:05:33
@[兹磁洛谷](/space/show?uid=108949)
~~救救孩子~~
by chinaxjh @ 2019-06-16 11:07:34
%%%
by 黄大伯 @ 2019-06-16 11:11:42
@[Aiming_High](/space/show?uid=87393)
by chinaxjh @ 2019-06-16 11:17:52
@[chinaxjh](/space/show?uid=136542) 没做过…
by F1aMiR3 @ 2019-06-16 11:21:02
$g=27,\ k\in [45,99]$
0->45->95->168
得分117分
by ZigZagKmp @ 2019-06-16 11:46:16