个人思路:二分答案算法
该题具有单调性如所剩能量以及跳入下一个建筑的能量比较
故可以采用二分算法进行解决

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=200050;
ll a[N],n,mx,r,l,sum;

bool f(int energy,int max){
      for(int i=0;i<n;i++){
        if(energy<=a[i]){
            energy-=a[i]-energy;
        }
       else {
         energy+=energy-a[i];
       }
       if(energy>=max){
        return true;
       }
       if(energy<0){
return false;
       }
       }
       return true;
      }
void solve(){
      l=0,r=mx;ll ans=-1;
      while(l<=r){
        ll m=l+(r-l)/2;
        if(f(m,mx)){
ans=m;r=m-1;
        }
        else {
        l=m+1;
        }

      }
cout<<ans<<endl;

}
int main(){
    int t=1;
    cin>>n;
    for(int i=0;i<n;i++){
        cin>>a[i];mx=max(mx,a[i]);
    }

    while(t--){
        solve();
    }
}