上界应为 1e8+1,而不是 1e8,后者会导致 1e8 刚好二分不到。
WA CODE:
int q2(int L,int R,int k){ int l=0,r=1e8; while(l<r){ int mid=l+r>>1; if(q1(1,1,n,L,R,mid)-1<k) l=mid+1; else r=mid; } return l-1; }
因为你最后返回的是 l-1,而任意时刻 l<=r,所以永远不会返回 1e8 这个数