二分,基本O(nlogn)
注意特别判断,
题目说了只要E > h(i+1)就会增加能量
E < h(i+1)会减少(h(i+1)-E)
而h最多是1e5,于是当E > 1e5时候这时候不就是E的阈值了么,
这时,不管h是多少,E总能够增加使得机器人能够通过
#include <iostream>
using namespace std;
const int inf = 1e5+7;
typedef long long ll;
bool check(int *a,int n,ll E)
{
for(int i=0;i<n;i++)
{
int ne = a[i+1];
if(ne > E)
E -= (ne-E);
else
E += (E-ne);
if(E > inf)
return true;
if(E < 0)
return false;
}
return true;
}
int main()
{
int n;
scanf("%d",&n);
int h[n+1];
h[0] = 0;
for(int i=1;i<=n;i++)
scanf("%d",&h[i]);
int le = 0,ri = inf;
while(le < ri)
{
int mid = (le+ri)>>1;
if(!check(h,n,mid))//不可以达到
le = mid+1;
else
ri = mid;
}
cout<<le;
return 0;
}