关注
作者:李济民233 链接:https://www.nowcoder.com/discuss/123368?type=0&order=0&pos=6&page=0 来源:牛客网 #include<bits/stdc++.h> using namespace std; typedef long long ll; const int maxn=500010; const ll INF=(ll)(1e9)*maxn; int n,d,dis[maxn]; ll k,val[maxn]; ll dp[maxn]; deque<int> q; int zuo,you; bool in_range(int j,int i) { return zuo<=dis[i]-dis[j]&&dis[i]-dis[j]<=you; } bool test(int g) { if(g>=d) { zuo=1; you=d+g; } else { zuo=d-g; you=d+g; } for(int i=1;i<=n;i++) dp[i]=-INF; int L=0; q=deque<int>(); for(int i=1;i<=n;i++) { if(zuo<=dis[i]&&dis[i]<=you) dp[i]=val[i]; while(1) { if(L+1>=i) break; if(dis[i]-dis[L+1]<zuo) break; L++; if(dp[L]==-INF) continue; while(!q.empty()&&dp[q.back()]<=dp[L]) q.pop_back(); q.push_back(L); } while(!q.empty()&&!in_range(q.front(),i)) q.pop_front(); if(!q.empty()) dp[i]=max(dp[i],dp[q.front()]+val[i]); if(dp[i]>=k) return 1; } return 0; } int main() { scanf("%d %d %lld",&n,&d,&k); int mx=0; for(int i=1;i<=n;i++) { scanf("%d %lld",&dis[i],&val[i]); mx=max(mx,dis[i]); } int l=0,r=mx,ans=-1; while(l<=r) { int mid=(l+r)/2; if(test(mid)) { r=mid-1; ans=mid; } else l=mid+1; } printf("%d\n",ans); return 0; }
查看原帖
点赞 评论
相关推荐
牛客热帖
正在热议
# 25届秋招公司红黑榜 #
87183次浏览 519人参与
# 非技术投递记录 #
415452次浏览 5465人参与
# 我的实习日记 #
1269589次浏览 15763人参与
# 简历被挂麻了,求建议 #
2332179次浏览 32085人参与
# 经纬恒润求职进展汇总 #
85101次浏览 894人参与
# 实习与准备秋招该如何平衡 #
632241次浏览 7637人参与
# 双非能在秋招上岸吗? #
43677次浏览 368人参与
# 元戎启行求职进展汇总 #
18879次浏览 167人参与
# 你的秋招进展怎么样了 #
1588343次浏览 24209人参与
# 如果实习可以转正,你会不会放弃秋招 #
188249次浏览 2661人参与
# 秋招拿一个offer可以躺平吗 #
85756次浏览 689人参与
# 机械制造岗投递时间线 #
15824次浏览 305人参与
# 实习工作,你找得还顺利吗? #
233318次浏览 2585人参与
# 海康威视求职进展 #
37353次浏览 245人参与
# 租房前辈的忠告 #
104603次浏览 5178人参与
# 国企/银行/研究所公司爆料 #
84627次浏览 383人参与
# 如何看待offer收割机的行为 #
507219次浏览 4952人参与
# 软开人,秋招你打算投哪些公司呢 #
36095次浏览 459人参与
# 远程面试的尴尬瞬间 #
10852次浏览 189人参与
# 如何写一份好简历 #
576679次浏览 8216人参与