错误示范:
int ans = 0, l = 1, r = n - x + 1;
while (l <= r) {
int mid = (l + r) / 2;
Info res = query(1, mid, mid + x - 1);
if (res.tmax >= x) {
ans = mid;
r = mid - 1;
} else {
l = mid + 1;
}
}
printf("%d\n", ans);
if (ans != 0) {
cover(1, ans, ans + x - 1, 1);
}
正确示范:
int ans = x - 1, l = x, r = n;
while (l <= r) {
int mid = (l + r) / 2;
Info res = query(1, 1, mid);
if (res.tmax >= x) {
ans = mid;
r = mid - 1;
} else {
l = mid + 1;
}
}
printf("%d\n", ans - x + 1);
if (ans != x - 1) {
cover(1, ans - x + 1, ans, 1);
}