https://www.luogu.org/problem/P3957

沉迷普及组题无法自拔。

显然二分答案,然后里面套个dp,$f[i]$表示跳到第$i$个格子的最大得分,复杂度$O(n^2logn)$50pts到手。

但是仔细思考就知道$f[i]$只能从它前面一段特定区域的最大的$f$转移过来,并且这个区域是随着$i$往后动的。

滑动窗口石锤,我们就可以维护一个单调队列来做这道题了,复杂度直接变为$O(nlogn)$

……但是即使你想出来了实现也不好写,而且仍然有很多细节需要解决……debug细节花了一个小时多……老龄化实锤。

1.这题只能跳到给定的方块上(最开始我想复杂了结果觉得不可做看了题解才意识到……)

2.注意我们要转移的对象和我们的滑动窗口是有一定距离的,也就是说转移$f[i]$时$f[i-1]$不一定在滑动窗口里,我们就需要另开变量去找哪些在滑动窗口里,详见代码。

3.注意初始化!到不了的格子别忘记初始为-INF,INF要特别大,必要时开long long

#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
const int N=5e5+;
const ll INF=1e12;
inline int read(){
int X=,w=;char ch=;
while(!isdigit(ch)){w|=ch=='-';ch=getchar();}
while(isdigit(ch))X=(X<<)+(X<<)+(ch^),ch=getchar();
return w?-X:X;
}
struct data{
int x;
ll s;
}q[N],f[N];
int n,d,k;
int x[N],s[N];
bool pan(int g){
ll ans=;int l=,r=;
q[++r]=(data){,};
for(int i=,j=;i<=n;i++){
f[i].s=-INF;
if(d-g>x[i])continue;
while(l<=r&&(q[l].x+d+g<x[i]))l++;
for(;j<i;j++){
if(f[j].x+d+g<x[i])continue;
if(f[j].x+d-g>x[i])break;
while(l<=r&&f[j].s>=q[r].s)r--;
q[++r]=f[j];
}
if(l<=r){
f[i]=(data){x[i],q[l].s+s[i]};
ans=max(ans,f[i].s);
}
}
return ans>=k;
}
int main(){
n=read(),d=read(),k=read();
for(int i=;i<=n;i++){
x[i]=read();s[i]=read();
}
int l=,r=1e9;
while(l<r){
int mid=(l+r)>>;
if(pan(mid))r=mid;
else l=mid+;
}
if(pan(l))printf("%d\n",l);
else puts("-1");
return ;
}

+++++++++++++++++++++++++++++++++++++++++++

+本文作者:luyouqi233。               +

+欢迎访问我的博客:http://www.cnblogs.com/luyouqi233/+

+++++++++++++++++++++++++++++++++++++++++++

最新文章

  1. 1Z0-053 争议题目解析706
  2. 【Spring实战】—— 12 AspectJ报错:error at ::0 can&#39;t find referenced pointcut XXX
  3. iOS学习28之UITabBarController
  4. Codeforces Round #382 (Div. 2) 解题报告
  5. 对前端mvc的认识和思考
  6. API 版本控制
  7. 使用JavaScript实现弹出层效果
  8. 不使用CvvImage类来在MFC中显示图像
  9. 如何高性能的给UIImageView加个圆角?(不准说layer.cornerRadius!)
  10. tomcat文件夹与文件解析
  11. 【JS】ajax 实现无刷新文件上传
  12. Oracle 数据库禁止全表访问的时候direct path read /////
  13. 防止网页被别人的网站iframe,服务端如何设置HTTP头部中的X-Frame-Options信息?
  14. IDEA使用笔记(九)——设置文件注释
  15. 2018-01-04 浅尝The Little Prover一书, 重逢Chez Scheme
  16. Scala学习笔记——类型
  17. 《linux内核》课本第五章读书笔记
  18. 关于Linux动态库的加载路径
  19. 一款基于TweenMax.js的网页幻灯片
  20. Maven安装(linux系统)

热门文章

  1. 未能加载文件或程序集“Spire.Pdf, Version=4.8.8.2020, Culture=neutral, PublicKeyToken=663f351905198cb3”或它的某一个依赖项。未能授予最小权限请求
  2. mysql 忘记密码,赋予用户权限,两台服务器的数据库之间快速导入
  3. db.sqlite如何导出转储为sql文件
  4. win10台式机rtl8188eu(FW 150 UM V2.0)无线网卡无法连接wifi(无法连接到这个网络)
  5. 201671010456-张琼 实验十四 团队项目评审&amp;课程学习总结
  6. 10-cmake语法-CMakeParseArguments
  7. JDOJ 1133 分段公司利润
  8. zzulioj - 2617 体检
  9. 使用uwsgi+nginx部署项目
  10. python相对导包问题