O(n)的时间复杂度预处理逆元和∑Cnm的前缀和
2021牛客多校B题,只能说tql⑧
O(n)的时间复杂度预处理逆元
inv[0] = 1;
inv[1] = 1;
for(int i = 2; i <= maxn - 5; ++i) {
inv[i] = (ll)(mod - mod / i) * inv[mod % i] % mod;
}
∑O(n)的时间复杂度求Cnm的前缀和
就可以得到下面这些式子,用这些式子可以快速求前缀和 :
s1[n + m] = 1;
for(int i = n + m; i >= 1; i--) {
s1[i - 1] = ((2ll * s1[i] % mod - 1ll * c(n + m - i, n) % mod + mod)) % mod;
}
s2[n - 1] = 1;
for(int i = n - 1; i >= 1; i--) {
s2[i - 1] = ((s2[i] % mod + 1ll * c(n + m - i, n - i) % mod + mod)) % mod;
s2[i - 1] = ((2ll * s2[i - 1] % mod - 1ll * c(n + m - i, n - i) % mod + mod)) % mod;
}
for(int i = n + m; i >= 0; i--) {
s1[i] = (s1[i] - s2[i] + mod) % mod;
}