abc309_c "C - Medicine" 二分探索解法

int main(){
    cin.tie(0);
    ios::sync_with_stdio(false);
 
    // input
    ll N,K;
    cin>>N>>K;
 
    VI A(N);
    VI B(N);
    rep(i,N){
      cin >> A[i] >> B[i];
    }
 
    // 1日目からK錠以下かどうか
    if(SUM(B)<=K){
      p(1);
      return 0;
    }
 
    ll left=1; // K錠より大きい
    ll right=inf; // K錠以下
 
    while(right-left>1){
      // centerの日
      ll center = (left+right)/2;
 
      // centerの日に飲むタブレットの合計
      ll tablet=0;
 
      rep(i,N){
        if(A[i]>=center){
          tablet += B[i];
        }
      }
 
      if(tablet<=K){
        right = center;
      }else{
        left = center;
      }
    }
    p(right);
 
    return 0;
}