求分析数据

P3957 [NOIP2017 普及组] 跳房子

或者有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


|