直接二分答案是会TLE的,只有30pts!
这样写就T了
// if(suf >= tmpk) {
// while(l <= r) {
// //cout << l << " " << r << endl;
// int mid = (l + r) >> 1;
// if(check(mid, pre + tmpk)) {
// ans = mid;
// r = mid - 1;
// } else {
// l = mid + 1;
// }
// }
// } else {
// while(l <= r) {
// //cout << l << " " << r << endl;
// int mid = (l + r) >> 1;
// if(check(mid, tmpk - suf)) {
// ans = mid;
// r = mid - 1;
// } else {
// l = mid + 1;
// }
// }
// }
由于人数是在变化的,在线段树上dfs会更高效。(其实本质也是二分)
int binsearch(int x, int l, int r, int rk) {
if(l == r) return l;
int mid = (l + r) >> 1;
if(tr[lc] >= rk) return binsearch(lc, l, mid, rk);
else return binsearch(rc, mid + 1, r, rk - tr[lc]);
}