逆天,最逆天的是,如果你使用二分的话,你可能会遇到一个无论怎么交都会wa的问题,然后看到反馈数据都是变成了r+1,这里有个bug就是最极限的情况是会有 100010∗2100010 的值,导致爆了,所以为了避免这种情况要对足够大的数提前判true
#include<bits/stdc++.h>
using namespace std;
#define N 100010
int n;
int a[N];
bool check(int mid){
for(int i=1;i<=n;i++){
if(mid>=a[i])mid+=mid-a[i];
else mid-=a[i]-mid;
if(mid<0)return false;
// 防止溢出。。。。
if(mid>=2*N)return true;
}
return true;
}
int main(){
cin>>n;
for(int i=1;i<=n;i++)cin>>a[i];
int l=0,r=N;
while(l<=r){
int mid=l+r>>1;
if(check(mid))r=mid-1;
else l=mid+1;
}
cout<<l<<endl;
return 0;
}