AC x13
TLE x15
#include<iostream>
using namespace std;
int n,a[200005],l=1,r=-1,ans;
long long m,suma;
bool check(int x){
long long sum=0;
for(int i=1;i<=n;i++) sum+=min(x,a[i]);
return sum<=m;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i];
r=max(r,a[i]);
suma+=a[i];
}
if(suma<=m){
cout<<"infinite"<<endl;
return 0;
}
while(l<r){
int mid=(l+r)/2;
if(check(mid)){
l=mid;
ans=mid;
}else r=mid-1;
}
cout<<ans<<endl;
return 0;
}
思路:二分答案。