[第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章 1.2t7] 跳房子
https://hecloud.top/posts/oi/12t7-跳房子/
作者
贺小云
发布于
2026-06-26
许可协议
CC BY-NC-SA 4.0

评论区

Profile Image of the Author
贺小云
热爱技术与折腾的博客 Dancing with uncertainty. 与不确定性共舞
公告
出于成本考虑,贺云已全面转型Serverless架构
分类
标签
碎碎念
站点统计
文章
68
分类
6
标签
38
总字数
46,536
运行时长
0
最后活动
0 天前
站点信息
构建平台
GitHub Actions
博客版本
Firefly v6.16.5
文章许可
CC BY-NC-SA 4.0

当前页面没有目录