Glider(前缀和+二分)
题目链接:Glider Gym-101911B
解题分析:下落的高度一定,是h。在没有气流的地方每秒下落1;所以可以转化为经过无气流地带的时间总长为h。
那么很显然从一个有气流地带的开始,选择下落,那么问题来了,一个一个去试然后一个一个计算他的路径去维护一个最大值吗?未免太过麻烦,所给数据有
那么大。
解题关键:二分+前缀和
二分查找用:lower_bound()
int x=lower_bound(a, a+n, val)-a;
其中i返回值为数组元素值大于等于val的第一个下标。相应地,如果数组中的所有元素的值都小于val,则返回值为数组最后一个元素下标的下一个下标
具体见代码注释:
/* 所给的数据:气流范围是按顺序给的,方便直接求前缀和*/
# include <iostream>
# include <stdio.h>
# include <string.h>
# include <string>
# include <iomanip>
# include <algorithm>
# include <ctime>
# include <cmath>
# include <climits>
# include <cstdlib>
# include <utility>
# include <bitset>
# include <cctype>
# include <cassert>
# include <set>
# include <map>
# include <deque>
# include <queue>
# include <stack>
# include <vector>
# include <functional>
using namespace std;
typedef long long ll;
const int maxn=2e5+;
const ll mod=1e9+;
const int eps=1e-;
const double pi=acos(-1.0);
# define mem(a,x) memset((a),(x),sizeof((a)))
# define gcd(a,b) (__gcd(a, b))
# define lcm(a,b) (a*b/__gcd(a, b))
# define lson l,m,rt<<
# define rson m+,r,rt<<|
# define lowbit(x)(x&(-x))
struct nod
{
int l, r;
}x[maxn];
int a[maxn], b[maxn];//a[i]表示前i个气流带的总长度,b[i]表示前i个无气流带(人的下降区)的总长度。
int main()
{
int n, h;
cin>>n>>h;
for(int i=; i<=n; i++ )
cin>>x[i].l>>x[i].r;
int maxx=-;
a[]=x[].r-x[].l;
b[]=;
for(int i=; i<=n; i++ )
{
a[i] = a[i-] + x[i].r - x[i].l;
b[i] = b[i-] + x[i].l - x[i-].r;
}
b[n+]=0x3f3f3f3f;
for(int i=; i<=n; i++ )
{
int pos=lower_bound(b+, b++n, b[i]+h)-b;//利用二分查找第一个大于等于b[i]+h的点的位置pos
maxx = max(maxx, a[pos-]-a[i-]);//a[pos-1]-a[i-1]为经过的当我们下降h时经过的上升气流的长度
}
cout<<maxx+h<<endl;
return ;
}
Glider(前缀和+二分)的更多相关文章
- Gym - 101911B Glider(前缀和+二分)
传送门:点我 A plane is flying at a constant height of hh meters above the ground surface. Let's consider ...
- Acwing:102. 最佳牛围栏(前缀和 + 二分)
农夫约翰的农场由 NN 块田地组成,每块地里都有一定数量的牛,其数量不会少于1头,也不会超过2000头. 约翰希望用围栏将一部分连续的田地围起来,并使得围起来的区域内每块地包含的牛的数量的平均值达到最 ...
- Codeforces 975 前缀和二分算存活人数 思维离直线速度相同判平行
A /* Huyyt */ #include <bits/stdc++.h> using namespace std; typedef long long ll; ]; ]; map< ...
- Codeforces 948 数论推导 融雪前缀和二分check 01字典树带删除
A. 全部空的放狗 B. 先O(NLOGNLOGN)处理出一个合数质因数中最大的质数是多少 因为p1 x1 x2的关系是 x2是p在x1之上的最小倍数 所以x1的范围是[x2-p+1,x2-1]要使最 ...
- Educational Codeforces Round 11 C. Hard Process 前缀和+二分
题目链接: http://codeforces.com/contest/660/problem/C 题意: 将最多k个0变成1,使得连续的1的个数最大 题解: 二分连续的1的个数x.用前缀和判断区间[ ...
- D. Frets On Fire 前缀和+二分
这个题真的难了我一天了,这种方法一开始没想出来,后来看了题解后明白了大致思路开始自己做但是!!!但是自己实现的时候老是一些细节出错!!!,调bug调了得有一个小时,蠢死了,这道题我一定要好好总结,总结 ...
- P1314 聪明的质监员(前缀和+二分)
P1314 聪明的质监员 显然可以二分参数W 统计Y用下前缀和即可. #include<iostream> #include<cstdio> #include<cstri ...
- CF978C Letters【前缀和+二分查找/几房几号】
[链接]:CF978C [分析]:在前缀和数组种二分找到>=询问数的位置,根据位置就好操作了 [代码]: #include<bits/stdc++.h> using namespac ...
- cf1119d Frets On Fire 前缀和+二分
题目:http://codeforces.com/problemset/problem/1119/D 题意:给一个数n,给出n个数组的第一个数(a[0]=m,a[1]=m+1,a[2]=m+2,... ...
随机推荐
- WPF 程序的编译过程
原文:WPF 程序的编译过程 基于 Sdk 的项目进行编译的时候,会使用 Sdk 中附带的 props 文件和 targets 文件对项目进行编译.Microsoft.NET.Sdk.WindowsD ...
- IIS err_connection_timed_out(响应时间过长)
场景:我在服务器的IIS上部署了一个网站,服务器上可以正常打开,然后我用自己的电脑访问,出现如下错误: 原因:服务器的防火墙对入站规则进行了一些限制. 解决方法:1.打开服务器的防火墙-----> ...
- 必须掌握的Linux用户组知识
在 Linux 系统中用户组起着重要作用.用户组提供了一种简单方法供一组用户互相共享文件.用户组也允许系统管理员更加有效地管理用户权限,因为管理员可以将权限分配给用户组而不是逐一分配给单个用户. 尽管 ...
- wamp环境下配置https证书后,网站内容访问受限
wamp环境下配置https证书后,网站内容访问受限,点击首页链接标签后报错,大致意思是没有权限进行操作. 解决方法:打开apache的http.conf(位置大致如下:项目所在目录\bin\apac ...
- mac杂记
brew 安装.更新 https://blog.csdn.net/fxp850899969/article/details/53284193 vmware work 15 pro https://ww ...
- Keystore Problem: Cannot convert COMBINED of type class java.lang.String to class org.jivesoftware.openfire.spi.ConnectionType
go to: Server Manager -> System Properties Search for "xmpp.socket.ssl.client.keypass" ...
- H3C Short GI
- Docker搭建私用仓库
搭建私有仓库 # 1.查找registry,官方的私用仓库镜像 docker search registry # 2.下载私有仓库镜像 docker pull registry # 3.创建并后台运行 ...
- 安恒西湖论剑线下上午CTF部分题目WP
简单的做了两个题,一道逆向,一道misc,其他题目,因为博主上课,时间不太够,复现时间也只有一天,后面的会慢慢补上 先说RE1,一道很简单的win32逆向,跟踪主函数,R或者TAB按几下, 根据esp ...
- 移动端媒体查询CSS3适配规则
该媒体查询适配规则是以UI设计图750p宽度为版本的,比如PS量的是450px,在书写时写 (450rem/2/15). @media (min-width:240px) and (max-width ...