好久没有写二分了

题意:有n本书 每本书有一个阅读时间ai 要在t时间内读最多的书 读书的顺序是连续的,如果无法读完一本书就不能开始

最开始觉得会是个dp,但是动规方程写不出来。想想会不会是二分呢,也写不出来
看了题解发现,输入的时候要做一个巧妙的处理
因为书是连续读的,如果ai存的是第1 到第i本书所用的时间总和的话, 那读【i,j】本书的时间就是ai-aj,这样就不需要循环算了啊!
于是固定一个起点 二分找终点

太久没写二分的结果就是 居然连二分的条件都不会了。

#include<stdio.h>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<queue>
#include<stack>
#define inf 1000000000
using namespace std; int n, t;
int a[100005];
//int dp[100005]; int main()
{
while(scanf("%d%d",&n,&t) != EOF){
a[0] = 0;
for(int i = 1; i <= n; i++){
scanf("%d",&a[i]);
a[i] += a[i - 1];
}
//memset(dp,0,sizeof(dp)); int cnt = 0;
for(int i = 0; i < n; i++){ int left = i + 1;
int right = n;
int mid = (left + right) / 2;
while(left <= right){ if(a[mid] - a[i] > t){
right = mid - 1;
}
else{
left = mid + 1;
} mid = (left + right) / 2;
} cnt = max(cnt, left - i);
} printf("%d\n",cnt - 1);
}
return 0;
}

这个区间左右都是闭的,a0 是用来辅助的所以最后答案是cnt - 1


最新文章

  1. MongoDB学习笔记三—增删改文档上
  2. Oracle笔记1-数据库概念
  3. linux centos中使用yum安装tomcat
  4. UITableView优化的方法
  5. Slip.js – 在触摸屏上实现列表的滑动排序功能
  6. 动手学习TCP:数据传输
  7. DVR分布式路由
  8. 在iphone上安装多个微信 【微信营销必备】
  9. 深入理解ASP.NET的内部运行机制(转)
  10. 重新认识Box Model、IFC、BFC和Collapsing margins
  11. 【多线程】--生产者消费者模式--synchronized版本
  12. Mac电脑使用Android Studio进行真机调试
  13. python之路第一篇
  14. Protobuf 从入门到实战
  15. Nginx配置文档
  16. 【工具相关】Web-将网站放在XAMPP上面
  17. Smashing The Browser:From Vulnerability Discovery To Exploit学习记录
  18. Spring整合Redis时报错:java.util.NoSuchElementException: Unable to validate object
  19. 【运维】Java开发人员掌握的Linux命令
  20. hdu 1385 floyd字典序

热门文章

  1. C# base和this的用法
  2. IOS UILineBreakMode的各种情况分析
  3. Nexus5 破解电信关键步骤
  4. System.exit(0)会跳过finally块的执行
  5. Ansible 远程执行命令
  6. mybais 之parameterType =&quot;list&quot;
  7. Android开发懒人库 -- ButterKnife (转载)
  8. (转载)Recyclerview | Intent与Bundle在传值上的区别 | 设置布局背景为白色的三种方法
  9. 119、 android:hardwareAccelerated=&quot;true&quot;or&quot;false&quot;硬件加速的重要性
  10. javaWeb项目重命名的问题