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的前缀和

image-20210804113625209

image-20210804113435939

就可以得到下面这些式子,用这些式子可以快速求前缀和 :

image-20210804113453177

    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;
    }
posted @ 2021-08-04 11:40  ACHanHan  阅读(106)  评论(0编辑  收藏  举报