PS:没看出这个可以离线。。。官方题解
标程貌似不是常规莫队的写法,同一个块内,没有对 r 排序,优先处理每个块的答案。学习到了阶乘逆元的递推公式。
inv[mx] = powi(fac[mx], mod - 2); for(int i = mx - 1; ~i; i--) inv[i] = 1ll * inv[i + 1] * (i + 1) % mod;
避免加法溢出
while(in < lst[i][j].n) val = (0ll + val + val + mod - C(in++, ik)) % mod;
避免乘法溢出
for(; b; b >>= 1, a = 1ll * a * a % mod) if(b & 1) c = 1ll * c * a % mod;
避免减法取模溢出
while(ik > lst[i][j].k) val = (val + mod - C(in, ik--)) % mod;