关注
作者:李济民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; }
查看原帖
点赞 评论
相关推荐
点赞 评论 收藏
分享
点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 这个offer值得去吗? #
20198次浏览 172人参与
# 上班苦还是上学苦呢? #
345129次浏览 2069人参与
# 联宝杯大学生创新大赛,你的技术值得产业级答案 #
47622次浏览 515人参与
# 如果春招能重来,我会___ #
21214次浏览 222人参与
# 实习怎么做才有更好的产出 #
49878次浏览 456人参与
# 除了线上,还能去哪些地方投简历 #
11367次浏览 115人参与
# 在爱玛,骑向未来 #
1611次浏览 161人参与
# AI coding的好用工具分享 #
88416次浏览 567人参与
# 找工作以来,你最看不惯__ #
79382次浏览 594人参与
# 字节开奖 #
150415次浏览 681人参与
# 大学四年该怎么过,才不算浪费时间? #
23832次浏览 106人参与
# 字节7000实习来了,你投了吗? #
55205次浏览 421人参与
# 薪资爆料 #
422217次浏览 2226人参与
# HR问:你期望的薪资是多少?如何回答 #
99320次浏览 833人参与
# 双非应该如何逆袭? #
585813次浏览 6390人参与
# 双非本科求职如何逆袭 #
1647964次浏览 13077人参与
# 你觉得实习能学到东西吗 #
154095次浏览 1494人参与
# 哪一刻你突然觉得实习“有点值了” #
28122次浏览 176人参与
# 你被哪些公司挂了? #
193209次浏览 1044人参与
# 字节求职进展汇总 #
1847280次浏览 15401人参与
# 金三银四,你有感觉到吗 #
777209次浏览 6329人参与
# 毕业后不工作的日子里我在做什么 #
269068次浏览 1739人参与
查看12道真题和解析