如果你 TLE 却找不到原因,请检查你的二分,如果你是这么写的:
while(_L < _R) {
int mid = (_L + _R) >> 1;
if(cpy[mid].val + tag[i] <= k) _L = mid;
else _R = mid - 1;
}
那么请改成
* : 原来的
+ : 正确做法
while(_L < _R) {
* int mid = (_L + _R) >> 1;
+ int mid = ((_L + _R) >> 1) + 1;
if(cpy[mid].val + tag[i] <= k) _L = mid;
else _R = mid - 1;
}