题意: 现在有1,2,3...N这N个站, 给定限定时间Limt,  N-1种票的价格, 分别对应一个最远距离,  叫你选择一种票, 满足可以在规定时间到达N站台,而且价格最低

思路: 如果买距离为L的票可以在规定时间到,那么距离>L的票也一定能到. 我们只需要二分出这个下界 L,然后在>=L里选择一个最低价格即可. 二分里面用单调队列优化. 复杂度O(NlgN).

(注意可能爆 long long

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn=;
ll p[maxn],t[maxn],q[maxn],dp[maxn],head,tail,N,Limit;
bool check(ll L)
{
head=tail=; q[head]=; dp[]=;
for(int i=;i<=N;i++){
while(tail<head&&i-q[tail]>L) tail++;
dp[i]=dp[q[tail]]+t[i];
q[++head]=i;
while(tail<head&&dp[q[head]]<=dp[q[head-]]) q[head-]=q[head],head--;
}
return dp[N]<=Limit;
}
int main()
{
int i; scanf("%I64d%I64d",&N,&Limit); Limit-=(N-);
for(i=;i<N;i++) scanf("%d",&p[i]);
for(i=;i<N;i++) scanf("%d",&t[i]);
ll L=,R=N-,Mid,Mn=;
while(L<=R){
Mid=(L+R)/;
if(check(Mid)) Mn=Mid,R=Mid-;
else L=Mid+;
}
ll ans=p[Mn];
for(i=Mn+;i<N;i++) ans=min(p[i],ans);
printf("%I64d\n",ans);
return ;
}

最新文章

  1. Unity中脚本的执行顺序总结(@WhiteTaken)
  2. Java单例模式实现的几种方式
  3. ACM Coin Test
  4. web项目引用Java项目,连接报错error HTTP Status 500 - Servlet execution threw an exception
  5. XPath语法 在C#中使用XPath示例 【转http://www.cnblogs.com/yukaizhao/archive/2011/07/25/xpath.html】非常详细的文章
  6. C#基础--面向对象计算器
  7. pjax 历史管理 jQuery.History.js
  8. [iOS 多线程 &amp; 网络 - 1.0] - 多线程概述
  9. 174. Dungeon Game
  10. poj2926 曼哈顿最远距离
  11. grunt用来压缩前端脚本
  12. ArcGIS RunTime SDK for Android之Features and graphics
  13. IPD体系向敏捷开发模式转型实施成功的四个关键因素
  14. Linux网络设备驱动 _驱动模型
  15. 发送Http
  16. 修改.net core MVC默认端口
  17. openssl安装/更新教程(CentOS)
  18. #leetcode刷题之路48-旋转图像
  19. Java 二维码--转载
  20. 利用 ICEpdf 快速实现 pdf 文件预览功能

热门文章

  1. sqlserver删除所有表
  2. PostMan的使用注意事项
  3. JS分段传输数据
  4. 20179209《Linux内核原理与分析》第十二周作
  5. C语言程序设计50例(经典收藏)之1
  6. vim 一键添加注释 自动添加文件头注释
  7. rails常用函数
  8. MVC中不能使用ViewBag
  9. NSAttributedStringKey
  10. 每天一个Linux命令(6)rmdir命令