结论

对于固定的 ,不同的 取值只有 个。 所在的块的右端点为

IMPORTANT

个,不是 个!

向下取整模板

for (ll l = 1, r, val; l <= n; l = r + 1) {
    val = n / l;
    r = n / val;
}

向上取整模板

TIP

用式子 可以把向上取整转化为向下取整。相应的,循环里的操作也应该进行这个转化。

for (ll l = 1, r, val; l <= n; l = r + 1) {
    val = (n + l - 1) / l;
    r = val == 1 ? INFLL : (n - 1) / (val - 1);
}