关注
作者:李济民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; }
查看原帖
点赞 评论
牛客热帖
更多
正在热议
更多
# 你的秋招白月光和意难平公司 #
12330次浏览 127人参与
# 职场上哪些事情令人讨厌 #
26673次浏览 109人参与
# 百度秋招 #
56642次浏览 394人参与
# 你想跟着什么样领导? #
8465次浏览 120人参与
# 牛客租房专区 #
127142次浏览 1358人参与
# 找实习是选平台还是选业务? #
12327次浏览 169人参与
# 什么样的背景能拿SSP? #
118068次浏览 413人参与
# 从夯到拉,评价编程语言 #
6879次浏览 60人参与
# 机械人还在等华为开奖吗? #
279725次浏览 1433人参与
# 十一月总结 #
16989次浏览 160人参与
# xxx岗位的一天 #
12172次浏览 121人参与
# 每个月花钱最多的地方是? #
6522次浏览 88人参与
# 大疆的机械笔试比去年难吗 #
93489次浏览 764人参与
# 你面试时吹过最大的牛 #
23062次浏览 124人参与
# AI“智障”时刻 #
7151次浏览 62人参与
# 如何缓解入职前的焦虑 #
239237次浏览 1425人参与
# 分享一个让你热爱工作的瞬间 #
48043次浏览 416人参与
# 好好告别我的学生时代 #
124195次浏览 1535人参与
# 应届生第一份工作最好去大厂吗? #
108668次浏览 974人参与
# 作业帮求职进展汇总 #
78480次浏览 520人参与
# 实习生如何通过转正 #
112362次浏览 1422人参与

