[第1章 1.2t7] 跳房子
138 字
1 分钟
[第1章 1.2t7] 跳房子
//滑动窗口队列+二分+DP//此处二分当模版记住得了//此处j只有在等到满足left后才++,此处把一个区间掰成2步处理很不错,值得借鉴,同时这也是运用队列的原因#include <bits/stdc++.h>using namespace std;typedef long long ll;const ll INF=1e18;ll n,d,k;vector<ll> x,s;bool check(ll t){ vector<ll> gain(n+1,-INF); deque<ll> dq; gain[0]=0; ll j=0; ll left=max(1LL,d-t),right=d+t; for(ll i=1;i<=n;i++){ while(j<i&&x[i]-x[j]>=left){ if(gain[j]!=-INF){ while(!dq.empty()&&gain[dq.back()]<gain[j])dq.pop_back(); dq.push_back(j); } j++; } while(!dq.empty()&&x[i]-x[dq.front()]>right)dq.pop_front(); if(!dq.empty())gain[i]=gain[dq.front()]+s[i]; else gain[i]=-INF; if(gain[i]>=k)return true; } return false;}int main(){ cin>>n>>d>>k; x.resize(n+1),s.resize(n+1); for(ll i=1;i<=n;i++)cin>>x[i]>>s[i]; ll r=1e9,l=0; ll ans=-1; while(l<=r){ ll mid=(r+l)/2; if(check(mid)){ ans=mid; r=mid-1; }else{ l=mid+1; } } cout<<ans<<endl; return 0;}支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!
相关文章智能推荐
1
总有一天我会搞清楚所有的细节
闲谈杂录如题
2
05异常-断言-日志
深入技术2026-10-26
3
04接口与lambda(案例)
深入技术手敲给出5个案例,辅助读者理解
4
二十岁,以及下一个十年
闲谈杂录二十岁生日这天,谨以此篇文章回望过去并展望下一个十年
5
[第2章 2.2e1] Palindromes
算法竞赛2026-06-27
随机文章随机推荐





