class Solution {
public:
/**
*@param L: Given n pieces of wood with length L[i]
*@param k: An integer
*return: The maximum length of the small pieces.
*/
int BSearch(vector<int> L,long long temp,int n,int k){
long long first=1;
long long end=temp;
long long mid;
int m;
long long sum;
while(first<end){
sum=0;
m=n;
mid=(first+end)/2;
while(m--){
sum+=L[m]/mid;
}
if(sum>=k)
first=mid+1;
else if(sum<k)
end=mid-1;
// cout<<first<<" "<<end<<" "<<sum<<endl;
}
m=n;
sum=0;
while(m--){
sum+=L[m]/end;
}
if(sum>=k){
// cout<<end<<endl;
return end;
}
else
return end-1;
}
int woodCut(vector<int> L, int k) {
// write your code here
if(L.empty())
return 0;
int n=L.size();
int m=n;
long long sum=0;
while(m--){
sum+=L[m];
}
// cout<<sum<<" "<<L[1]<<endl;
if(sum<k)
return 0;
long long temp;
temp=sum/k;
// cout<<sum<<" "<<temp<<" "<<k<<" "<<n<<endl;
return BSearch(L,temp,n,k);
}
};