#include<bits/stdc++.h> #define int long long #define MAXN 0x3f3f3f3f3f3f3f3f #define MINN -0x3f3f3f3f3f3f3f3f #define Mirai ios::sync_with_stdio(0),cin.tie(0),cout.tie(0); usingnamespace std;
constint N=1e5+29; int n,k,maxn; int a[N];
boolcheck(int x){//x表示小段木头的长度 int ans=0; for(int i=1;i<=n;i++) ans+=a[i]/x;//枚举每根原木,将能从这根原木中切割出长度为x的小段木头的数量累加到ans中 return ans>=k;//这里取了等号给l } intbinary(){ int l=0,r=maxn+1;//这里l最好从0开始,r从maxn+1开始,避免出锅 while(l+1<r){//老师讲的最原始的方法【也是我觉得最好理解的 int mid=l+r>>1; if(check(mid)) l=mid; else r=mid; } return l;//因为等号给了l,所以答案储存在l里 }