D题,是求最远能飞到哪里,肯定是从某一个气流的起点开始飞飞的最远,我们就可以枚举每一个气流,看最远能飞到哪里,然后取最大值,怎么判断最远飞到哪里就可以通过先求出前缀和,在看某一段+h可以走过多少间隙就可以了,当时写前缀和的时候把自己写迷糊了,这是别人的代码:

#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 ;
}
View Code

 

posted on 2021-02-26 12:00  小灰灰的父亲  阅读(49)  评论(0编辑  收藏  举报