【CodeForces - 1041D】Glider (枚举起点,双指针 或 二分终点,思维)(知识点总结)

题干:

A plane is flying at a constant height of hh meters above the ground surface. Let's consider that it is flying from the point (−109,h)(−109,h) to the point (109,h)(109,h) parallel with OxOx axis.

A glider is inside the plane, ready to start his flight at any moment (for the sake of simplicity let's consider that he may start only when the plane's coordinates are integers). After jumping from the plane, he will fly in the same direction as the plane, parallel to OxOx axis, covering a unit of distance every second. Naturally, he will also descend; thus his second coordinate will decrease by one unit every second.

There are ascending air flows on certain segments, each such segment is characterized by two numbers x1x1 and x2x2 (x1<x2x1<x2) representing its endpoints. No two segments share any common points. When the glider is inside one of such segments, he doesn't descend, so his second coordinate stays the same each second. The glider still flies along OxOx axis, covering one unit of distance every second.

 If the glider jumps out at 11, he will stop at 1010. Otherwise, if he jumps out at 22, he will stop at 1212.

Determine the maximum distance along OxOx axis from the point where the glider's flight starts to the point where his flight ends if the glider can choose any integer coordinate to jump from the plane and start his flight. After touching the ground the glider stops altogether, so he cannot glide through an ascending airflow segment if his second coordinate is 00.

Input

The first line contains two integers nn and hh (1≤n≤2⋅105,1≤h≤109)(1≤n≤2⋅105,1≤h≤109) — the number of ascending air flow segments and the altitude at which the plane is flying, respectively.

Each of the next nn lines contains two integers xi1xi1 and xi2xi2 (1≤xi1<xi2≤109)(1≤xi1<xi2≤109) — the endpoints of the ii-th ascending air flow segment. No two segments intersect, and they are given in ascending order.

Output

Print one integer — the maximum distance along OxOx axis that the glider can fly from the point where he jumps off the plane to the point where he lands if he can start his flight at any integer coordinate.

Examples

Input

3 4
2 5
7 9
10 11

Output

10

Input

5 10
5 7
11 12
16 20
25 26
30 33

Output

18

Input

1 1000000000
1 1000000000

Output

1999999999

Note

In the first example if the glider can jump out at (2,4)(2,4), then the landing point is (12,0)(12,0), so the distance is 12−2=1012−2=10.

In the second example the glider can fly from (16,10)(16,10) to (34,0)(34,0), and the distance is 34−16=1834−16=18.

In the third example the glider can fly from (−100,1000000000)(−100,1000000000) to (1999999899,0)(1999999899,0), so the distance is 1999999899−(−100)=19999999991999999899−(−100)=1999999999.

题目大意:

  你现在处于高度为h的地方,每秒y坐标会减少1,x坐标会增加1,而现在会有n个气流区[l,r],在每个气流区中,你的y坐标不会改变,你的x坐标每秒会增加1。(保证所给出的气流两两之间没有交集)现在你可以从x轴上的任意一点下落,现在问你最远的飞行路径。(即终点x坐标 减 起点x坐标的最大值)

解题报告:

   大体:看到数据量,nlogn解决,于是乎枚举每一个起点,二分找到终点,维护最大值,就可以了呀。

仔细分析:

首先要分析出,把竖直下落的高度转换成走过的间隙的长度和(高中物理题貌似这种转化套路很多见?)然后我们看在这些个间隙下,能走多长个气流(不是越多越好,而是越长越好),维护一个maxx,然后最后答案就是maxx + h就可以了。

不明白可以看下面的图:

可以看成是这个东西:

相当于是在选取的ci≤h的情况下,使Σwi最大。

AC代码:

#include<bits/stdc++.h>using namespace std;
const int MAX = 2e5 + 5;
int n,h;
int b[MAX],c[MAX];
struct Node {int l,r;
} node[MAX];
int main()
{cin>>n>>h;for(int i = 1; i<=n; i++) scanf("%d%d",&node[i].l,&node[i].r);c[1] = 0;b[1] = node[1].r-node[1].l;for(int i = 2; i<=n; i++) {b[i] = node[i].r - node[i].l;c[i] = node[i].l - node[i-1].r;b[i] += b[i-1];c[i] += c[i-1];}c[n+1] = INT_MAX;//这句貌似可以没有、、int maxx = -1,ans;for(int i = 1; i<=n; i++) {int pos = lower_bound(c+1,c+n+1,c[i]+h) - c;ans = b[pos-1] - b[i-1];maxx = max(maxx,ans);}printf("%d\n",maxx+h);return 0 ;
}
/*
2 3
1 2
3 4
*/

总结:

   就是要多逼着自己做做D题啊!!!有的时候也不算很难想,不是高不可攀,是不是?

关于初始化:这里对于i=1的情况单独做了初始化,然后从i=2开始进入for循环,是正解,但是不加初始化,直接i=1开始计入for,也可以ac,但是就说不太过去,反正输出c[2]的值是和我们想得到的值是不一样的,换句话说,是不合法的。

记住一个套路:

     求前缀和 + 二分。其中二分寻值时可以依附于正在枚举的i上,就像这个题,二分找的就是c[i]相关的。这样就避免了很麻烦的双指针:链接在此

#include <bits/stdc++.h>
#define maxn 200005
using namespace std;
struct Node{int l,r;
}q[maxn];
typedef long long ll;
int main()
{ll n,h;cin>>n>>h;for(int i=0;i<n;i++){scanf("%I64d%I64d",&q[i].l,&q[i].r);}ll l,r,tmp1,tmp2;l=q[0].l,r=q[0].r+h;//首先l指针先指向第一个气流的起点,r指针指向落点ll ans=h;tmp1=tmp2=0;while(tmp1<n){//枚举每一个气流while(tmp2+1<n&&q[tmp2+1].l<r){//如果下一个气流的左区间在终点前,则证明出现情况2,则将终点加上该气流的区间大小tmp2++;r+=q[tmp2].r-q[tmp2].l;}ans=max(ans,r-l);//记录r-l的最大值tmp1++;l=q[tmp1].l;//将起点置为下一个气流的起点r+=q[tmp1].l-q[tmp1-1].r;   //加上气流与气流之间的大小}cout<<ans<<endl;
}

或者一位红名大佬的双指针:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
#define mp make_pair
const int N = 200200;
int n, h;
int a[N][2];
int ans;
int main()
{scanf("%d%d", &n, &h);for (int i = 0; i < n; i++) scanf("%d%d", &a[i][0], &a[i][1]);int r = 0;int curH = h;for (int l = 0; l < n; l++) {while(r < n - 1 && curH > a[r + 1][0] - a[r][1]) {curH -= a[r + 1][0] - a[r][1];r++;}ans = max(ans, a[r][1] - a[l][0] + curH);if (l < n - 1)curH += a[l + 1][0] - a[l][1];}printf("%d\n", ans);return 0;
}

或者app大佬:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 200000;
int n, h, l[maxn + 10], r[maxn + 10], m;
pair<ll, ll> a[maxn + 10];
int idl = 1, idr = 1;
ll lenl = -1e18, lenr = -1e18, ans;
int main() {scanf("%d%d", &n, &h);lenr += h; ans = h;for (int i = 1; i <= n; ++i) scanf("%d%d", &l[i], &r[i]);a[++m] = make_pair(-(long long)1e18, l[1]);for (int i = 2; i <= n; ++i)a[++m] = make_pair(r[i - 1], l[i]);a[++m] = make_pair(r[n], (long long)1e18);while (idl <= m && idr <= m) {ans = max(ans, lenr - lenl);ll dist = min(a[idr].second - lenr, a[idl].second - lenl);lenl += dist; lenr += dist;if (lenl < a[idl].second) ++lenl;else lenl = a[++idl].first + 1;if (lenr < a[idr].second) ++lenr;else lenr = a[++idr].first + 1;}printf("%lld", ans);
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/441533.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

duilib vs2015 安装_FFmpeg视频播放器开发-FFmpeg简介与项目环境搭建(一)

前言&#xff1a;视频开发库有很多&#xff0c;例如微软的DirectShow&#xff1b;开源库OpenCV&#xff0c;当然OpenCV主要是图像处理&#xff0c;视频部分还是用的ffmpeg, 而且无法解码音频&#xff1b;SDL&#xff1b;大华和海康都有自己的库等等。音视频属于流媒体领域&…

【洛谷 - U43391】不是0-1背包的暴力AC(思维,二分,可转化为二元组问题,复习暴力dfs总结)

题干&#xff1a; https://www.luogu.org/problemnew/show/U43391 自01背包问世之后&#xff0c;小A对此深感兴趣。一天&#xff0c;小A去远游&#xff0c;却发现他的背包不同于01背包。 小A的背包最多能装W的价值 现有n件物品&#xff0c;分别为v1,v2,v3……vn 问如何存放物…

windowsthinpc虚拟内存_windows thin pc如何开启windows功能

没有“\DS\”目录 (子目录)没有“\Packages\”目录(子目录)没有“\FeaturePack\”目录(子目录)没有“\LangPacks\"目录(子目录)未找到“winemb-premiumcodecs-dolby-ac3-audioencoder.cab”未找到“WinEmb-PremiumCodecs-MPEG2andDolbyDecoder.cab”未找到“WinEmb-Premiu…

【牛客 - 185F】 假的数学游戏(斯特林公式,大数Java打表)

题干&#xff1a; 输入描述: 第一行&#xff1a;一个整数X 输出描述: 第一行&#xff1a;一个整数N 示例1 输入 复制 7 输出 复制 10 备注: 每个测试点所对应的X满足&#xff1a;第i个测试点输入的值为第i-1个测试点输入的值乘以10再加上7。特别的&#xff0c;第一个…

js怎么调用wasm_对于WebAssembly编译出来的.wasm文件js如何调用

WebAssembly也叫浏览器字节码技术 这里就不过多的解释了网上很多介绍主要是让大家知道在js里面如何调用执行它&#xff0c;我之前看WebAssemblyAPI时候反正是看得一脸懵逼也是为了大家能更快的入手这个比较新的技术吧这边写的一个dom是官方推荐的c/c编译的c代码1 int add (int …

*【HDU - 6333】Problem B. Harvest of Apples (莫队,逆元,组合数学)(这样预处理正确吗?)

题干&#xff1a; There are nn apples on a tree, numbered from 11 to nn. Count the number of ways to pick at most mm apples. Input The first line of the input contains an integer TT (1≤T≤105)(1≤T≤105) denoting the number of test cases. Each test c…

ruoyi 多模块部署_大数据时代,独立部署的商城系统具有哪些优势?

独立部署是把一个可部署软件包安装到一个指定IT环境上并让其按预定流程提供服务的过程。现如今&#xff0c;越来越多的商家开始搭建网上商城系统&#xff0c;从而为自己积攒多年的客户群体提供更为便捷的购物模式&#xff0c;让购物变得更加智能化。独立部署的商城系统具有哪些…

【SPOJ - DQUERY】D-query(权值树状数组 或 主席树 或 莫队)

题干&#xff1a; Given a sequence of n numbers a1, a2, ..., an and a number of d-queries. A d-query is a pair (i, j) (1 ≤ i ≤ j ≤ n). For each d-query (i, j), you have to return the number of distinct elements in the subsequence ai, ai1, ..., aj. Inpu…

freerdp 解压安装_Ubuntu下编译安装运作FreeRdp连接Windows

Ubuntu下编译安装运行FreeRdp连接Windows.linux下编译源码进行USB重定向到远程桌面的测试&#xff0c;经过参数的正确配置&#xff0c;可以正常的重定向。具体的操作步骤如下:⑴在虚拟机上安装git,安装命令如&#xff1a;sudo apt-get install git。⑵从GitHub下载FreeRdp源码&…

【HDU - 3328】Flipper (栈模拟)

题干&#xff1a; Problem Description Little Bobby Roberts (son of Big Bob, of Problem G) plays this solitaire memory game called Flipper. He starts with n cards, numbered 1 through n, and lays them out in a row with the cards in order left-to-right. (C…

trunk口不通防火墙_交换机S5700与防火墙USG5500无法对接Eth-trunk LACP-static模式

问题&#xff1a;交换机S5700与防火墙USG5500无法对接Eth-trunk LACP-static模式&#xff0c;两端正常配置后&#xff0c;端口状态显示错误&#xff0c;Eth-trunk端口无法up 。问题描述&#xff1a;交换机侧 GE0/0/5和GE 0/0/6 组成Eth-trunk3 通过LACP-static与防火墙对接&…

【HDU - 1850】Being a Good Boy in Spring Festival (尼姆博弈,nim,异或前缀和)

题干&#xff1a; 一年在外 父母时刻牵挂 春节回家 你能做几天好孩子吗 寒假里尝试做做下面的事情吧 陪妈妈逛一次菜场 悄悄给爸爸买个小礼物 主动地 强烈地 要求洗一次碗 某一天早起 给爸妈用心地做回早餐 如果愿意 你还可以和爸妈说 咱们玩个小游戏吧 ACM课上学的呢…

comsol临时文件夹中有不支持的字符_Editor 常见问题

Editor的数据存在哪里&#xff1f;Editor所处理的数据&#xff0c;就是你自己本地电脑的文件夹、图片、文本文档。除了配置信息、一些必要的临时缓存之外&#xff0c;Editor没有特殊格式的数据。所以&#xff0c;数据都在电脑里&#xff1b;比如说需要备份的话&#xff0c;只要…

【51nod - 1098】 最小方差(基础数学,公式化简,前缀和,积的前缀和)

题干&#xff1a; 若x1,x2,x3……xn的平均数为k。 则方差s^2 1/n * [(x1-k)^2(x2-k)^2…….(xn-k)^2] 。 方差即偏离平方的均值&#xff0c;称为标准差或均方差&#xff0c;方差描述波动程度。 给出M个数&#xff0c;从中找出N个数&#xff0c;使这N个数方差最小。 Input …

【牛客 - 181B】送分题(另类求解a+b,二分)

题干&#xff1a; 对于一套题来说&#xff0c;没有一道送分题&#xff0c;就很不符合常理&#xff0c;但是我又懒得写送分题&#xff0c;所以你可以直接复制以下代码&#xff0c;即可ac本题. #include<cstdio>#include<iostream> using namespace std; int a,…

牧马人机械鼠标g3_性价比好的有线鼠标都有哪些?2020年12款热选游戏鼠标推荐...

决定一款鼠标好坏因素众多&#xff0c;我们常常发现一款鼠标&#xff0c;有些用户觉得非常好&#xff0c;也有些用户觉得不好&#xff0c;是因为大多数用户对于鼠标的尺寸大小、轻重、实际的手感等方面都会有所不同&#xff0c;这都很正常&#xff0c;所以适合自己才是最好的。…

emc re 整改 超标_老刘工程师睡前故事5-EMC 辐射发射超标怎么办?

老刘工程师睡前故事-EMC 辐射发射超标怎么办&#xff1f;今天的工程师睡前故事讲讲汽车EMC测试中辐射发射超标了怎么办?首先来聊聊辐射发射的基本知识辐射发射英文简称RE&#xff0c;检测的是产品对外的辐射干扰。国际标准参考CISPR25&#xff0c;国标参考GBT18655。这个标准分…

全国计算机等级考试职称,全国职称计算机考试与全国计算机等级考试有什么不同?...

落羽杉属共有三个树种&#xff1a;落羽杉(Taxodium.distichum)、池杉(T.ascendens)和墨西哥落羽杉(T.mucronatum)。苏杉一号(T. distichum ‘Sushang’)是从落羽杉不同地理种源、家系中选育出的优良种源。中山杉302是从落羽杉和墨西哥落羽杉杂种中选育出的优良无性系(另外&…

【PAT - 甲级 - 1018】Public Bike Management (带权最短路,多条最短路中加条件,DFS)

题干&#xff1a; 链接&#xff1a;https://www.nowcoder.com/questionTerminal/4b20ed271e864f06ab77a984e71c090f 来源&#xff1a;牛客网 There is a public bike service in Hangzhou City which provides great convenience to the tourists from all over the world. On…

【牛客 - 181C】序列(前缀和,二分,可用set维护)(有坑)

题干&#xff1a; 小a有n个数&#xff0c;他想把他们划分为连续的权值相等的k段&#xff0c;但他不知道这是否可行。 每个数都必须被划分 这个问题对他来说太难了&#xff0c;于是他把这个问题丢给了你。 输入描述: 第一行为两个整数n,q&#xff0c;分别表示序列长度和询问…