当周赛打就掉分系列。近几个月谨慎选择一直在上分,瞬间掉回解放前。实力还是不够啊。
利用前缀和方便地记录下从某个点开始往后,到终点气流之间的间距和。
学习low_bound的用法,复习前缀和的用法。
#include<bits/stdc++.h>
using namespace std;
const int mx=2e5+10;
typedef long long ll;
ll dis[mx],val[mx];//dis是气流之间间距的前缀和 val是气流的前缀和
struct node
{
int l,r;
}s[mx];
int main()
{
int n,h;
cin>>n>>h;
for(int i=1;i<=n;i++)
{
scanf("%d %d",&s[i].l,&s[i].r);
if(i>1)
{
dis[i]=dis[i-1]+s[i].l-s[i-1].r;
}
val[i]=val[i-1]+s[i].r-s[i].l;
}
ll ans=0,cur;
for(int i=1;i<=n;i++)
{
int pos=lower_bound(dis+1,dis+1+n,h+dis[i])-dis;//h+dis[i]实则是把之前的数值减掉
pos--;
cur=val[pos]-val[i-1];//先找最大的气流长度
// cout<<cur<<endl;
ans=max(ans,cur);
}
ans+=h;
cout<<ans<<endl;
return 0;
}