class Solution {
public int minEatingSpeed(int[] piles, int h) {
int left = 1;
int right = 1000000000;
while (left <= right) {
int mid = left + (right - left) / 2;
if (check(piles, mid, h)) right = mid - 1;
else left = mid + 1;
}
return left;
}
public boolean check(int[] piles, int k, int h) {
int hours = 0;
for (int pile : piles) {
int div = pile / k;
hours += div;
if (pile % k != 0) {
hours++;
}
}
return hours <= h;
}
}
Y2xhc3MgU29sdXRpb24gewogICAgcHVibGljIGludCBtaW5FYXRpbmdTcGVlZChpbnRbXSBwaWxlcywgaW50IGgpIHsKICAgICAgICBpbnQgbGVmdCA9IDE7CiAgICAgICAgaW50IHJpZ2h0ID0gMTAwMDAwMDAwMDsKCiAgICAgICAgd2hpbGUgKGxlZnQgPD0gcmlnaHQpIHsKICAgICAgICAgICAgaW50IG1pZCA9IGxlZnQgKyAocmlnaHQgLSBsZWZ0KSAvIDI7CiAgICAgICAgICAgIGlmIChjaGVjayhwaWxlcywgbWlkLCBoKSkgcmlnaHQgPSBtaWQgLSAxOwogICAgICAgICAgICBlbHNlIGxlZnQgPSBtaWQgKyAxOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbGVmdDsKICAgIH0KICAgICAgICBwdWJsaWMgIGJvb2xlYW4gY2hlY2soaW50W10gcGlsZXMsIGludCBrLCBpbnQgaCkgewoKICAgICAgICBpbnQgaG91cnMgPSAwOwogICAgICAgIGZvciAoaW50IHBpbGUgOiBwaWxlcykgewogICAgICAgICAgICBpbnQgZGl2ID0gcGlsZSAvIGs7CiAgICAgICAgICAgIGhvdXJzICs9IGRpdjsKICAgICAgICAgICAgaWYgKHBpbGUgJSBrICE9IDApIHsKICAgICAgICAgICAgICAgIGhvdXJzKys7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIGhvdXJzIDw9IGg7CiAgICB9Cn0=