class Solution {
public:

    bool canEat(vector<int>& piles , int h , int k){
        long long hours = 0;
        for(int pile : piles){
            hours += (pile+k-1LL)/k;
        }

        return hours<=h;
    }
    int minEatingSpeed(vector<int>& piles, int h) {
        int left  = 1;
        int right  = *max_element(piles.begin() , piles.end());

        int res = right;

        while(left <= right){
            int mid = left + (right - left)/2;

            if(canEat(piles , h , mid)){
                res = mid;
                right = mid - 1;
            }else{
                left = mid+1;
            }
        }

        return res;
    }
};

https://leetcode.com/problems/koko-eating-bananas/

https://takeuforward.org/binary-search/koko-eating-bananas/