- https://atcoder.jp/contests/abc309/tasks/abc309_c
- AC https://atcoder.jp/contests/abc309/submissions/43400326
- 解説と違う解法なので書いておく
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; }