【链接】 我是链接,点我呀:)

【题意】

题意

【题解】

二分。
枚举每一个上升区的起始位置作为起点(这样做肯定是最优的),然后如果没有掉在地上的话就尽量往右二分(只有上升区之间的间隙会让他往下掉)
用前缀和处理出来每个上升区的长度,这样就能根据前缀和处理出来从第i个上升区到第mid个上升区之间有多少个空隙(即会往下掉)了。

也可以用一个队列模拟高度为h够掉多少个上升区,如果整个队里里面的上升区(从最左端开始)经过之后会掉到地面,那么就只要让左端点往右移动就可以了。

(然后减少掉落的高度,也即减少代价看看是否小于h,如果仍然大于等于,就继续往右)

(问题就转换成,选择某个数字之后,会有一定的代价,然后要连续选择,然后有一个代价的上限,让你选择尽可能多的一个连续长度数字)

【代码】

#include <bits/stdc++.h>
#define rep1(i,a,b) for (int i = a;i <= b;i++)
#define rep2(i,a,b) for (int i = a;i>= b;i--)
#define ll long long
using namespace std; const int N = (int)2e5; int n,h;
pair<int,int> a[N+10];
int sum[N+10]; bool ok(int start,int idx){
int dis = a[idx].first-a[start].first;
dis-=sum[idx-1]-sum[start-1];
if (dis>=h) return false;
return true;
} int main(){
ios::sync_with_stdio(0),cin.tie(0);
cin >> n >> h;
for (int i = 1;i <= n;i++){
int x,y;
cin >> x >> y;
a[i].first = x;a[i].second = y;
}
for (int i = 1;i <= n;i++){
sum[i] = a[i].second-a[i].first;
sum[i]+=sum[i-1];
}
int ans = 0;
for (int i = 1;i <= n;i++){
int l = i,r = n,temp = i;
while (l<=r){
int mid = (l+r)/2;
if (ok(i,mid)){
temp = mid;
l = mid + 1;
}else{
r = mid - 1;
}
}
int dis = a[temp].second-a[i].first;
int rest = dis-(sum[temp]-sum[i-1]);
rest = h-rest;
dis += rest;
ans = max(ans,dis);
}
cout<<ans<<endl;
return 0;
}

【Codeforces 1041D】Glider的更多相关文章

  1. 【codeforces 415D】Mashmokh and ACM(普通dp)

    [codeforces 415D]Mashmokh and ACM 题意:美丽数列定义:对于数列中的每一个i都满足:arr[i+1]%arr[i]==0 输入n,k(1<=n,k<=200 ...

  2. 【codeforces 707E】Garlands

    [题目链接]:http://codeforces.com/contest/707/problem/E [题意] 给你一个n*m的方阵; 里面有k个联通块; 这k个联通块,每个连通块里面都是灯; 给你q ...

  3. 【codeforces 707C】Pythagorean Triples

    [题目链接]:http://codeforces.com/contest/707/problem/C [题意] 给你一个数字n; 问你这个数字是不是某个三角形的一条边; 如果是让你输出另外两条边的大小 ...

  4. 【codeforces 709D】Recover the String

    [题目链接]:http://codeforces.com/problemset/problem/709/D [题意] 给你一个序列; 给出01子列和10子列和00子列以及11子列的个数; 然后让你输出 ...

  5. 【codeforces 709B】Checkpoints

    [题目链接]:http://codeforces.com/contest/709/problem/B [题意] 让你从起点开始走过n-1个点(至少n-1个) 问你最少走多远; [题解] 肯定不多走啊; ...

  6. 【codeforces 709C】Letters Cyclic Shift

    [题目链接]:http://codeforces.com/contest/709/problem/C [题意] 让你改变一个字符串的子集(连续的一段); ->这一段的每个字符的字母都变成之前的一 ...

  7. 【Codeforces 429D】 Tricky Function

    [题目链接] http://codeforces.com/problemset/problem/429/D [算法] 令Si = A1 + A2 + ... + Ai(A的前缀和) 则g(i,j) = ...

  8. 【Codeforces 670C】 Cinema

    [题目链接] http://codeforces.com/contest/670/problem/C [算法] 离散化 [代码] #include<bits/stdc++.h> using ...

  9. 【codeforces 515D】Drazil and Tiles

    [题目链接]:http://codeforces.com/contest/515/problem/D [题意] 给你一个n*m的格子; 然后让你用1*2的长方形去填格子的空缺; 如果有填满的方案且方案 ...

随机推荐

  1. spring boot 项目发布运行

    1. maven install 发布jar包 2. java -jar webservice.jar 启动jar包

  2. [POI2008]Sta

    Description 给出一个N个点的树,找出一个点来,以这个点为根的树时,所有点的深度之和最大 Input 给出一个数字N,代表有N个点.N<=1000000 下面N-1条边. Output ...

  3. _bzoj1208 [HNOI2004]宠物收养所【Splay】

    传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1208 以后在空间限制允许的情况下我绝对不纠结内存占用问题啦!就因为不舍得用long long ...

  4. jmeter(一)工具介绍(一)

    一.JMeter 介绍 Apache JMeter是100%纯JAVA桌面应用程序,被设计为用于测试客户端/服务端结构的软件(例如web应用程序).它可以用来测试静态和动态资源的性能,例如:静态文件, ...

  5. java 缓冲流 Buffer

    缓冲流 Buffer :设置缓冲区加快执行效率 子类: (一)BufferedInputStream : 缓冲输入字节流 ,目的:提高读取文件的效率  注意: BufferedInputStream ...

  6. 单例模式及php实现

    单例模式: 单例模式(Singleton Pattern):单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类,它提供全局访问的方法. 单例模式的要点有三个:一 ...

  7. Android学习笔记(十二) 线程

    Android中的线程和Java中的线程使用方法类似,参考(四)Java基础知识回顾 MainThread与WorkerThread UI相关的线程都运行在主线程(MainThread/UIThrea ...

  8. git创建分支及日常使用

    克隆代码 git clone https://github.com/master-dev.git 查看所有分支 git branch --all # 默认只有master分支,所以会看到如下两个分支 ...

  9. 常用css属性拓展

    text-overflow:clip | ellipsis(默认值:clip)clip:当内联内容溢出块容器时,将溢出部分裁切掉.ellipsis:当内联内容溢出块容器时,将溢出部分替换为(...). ...

  10. 计算机网络、OSI模型、TCP/IP族

    一.计算机网络分类 1.按通信距离分类: 局域网:LAN,10m-1000m,房间.校园: 城域网:MAN,10km,城市: 广域网:WAN,100km以上,国家.全球. 二.OSI(Open Sys ...