求助为什么ac要加等于号,不加等于号90
查看原帖
求助为什么ac要加等于号,不加等于号90
1340313
mowanggao楼主2024/5/9 17:14
//H越多米越少,可能有多个H获得相同M米要找最大的H
//思路:二分,找最后一个M(H)<=M,以树高为区间,转化为求第一个M(H)>;M
//其位置减1
#include<iostream>
using namespace std;
const int maxn=1e6+10;
int mmax=0;
long long a[maxn];
long long n,m;
long long M(int h){
long long sum=0;
for(int i=1;i<=n;i++){
if(a[i]>h){sum+=a[i]-h;}
}
return sum;
}
int twofen(int left,int right){//543321
while(left<right){
int mid=(left+right)/2;
if(M(mid)>=m)left=mid+1;
else right=mid;
}
return left-1;
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){cin>>a[i];
if(a[i]>mmax){mmax=a[i];}
}
printf("%d",twofen(1,mmax));
return 0;
}

2024/5/9 17:14
加载中...