【总结】不同卷积如何来搞

【总结】不同卷积如何来搞

md老子又tmd卷积构造错调一天,我来向smy && 高哥学习,总结一下不同的形式如何卷积

  • 等号

    • 和为定值

      • 从0到上界全遍历

        \[a_i=\sum_{j=0}^i b_j c_{i-j} \]

        最简单的形式,也是最基础的形式

      • \(j\in[l,r]\cap [0,i]\)

        此时由于\(j\)有这样的限制,也就是意思是\(b[]\)只有\([l,r]\)有值,令其他b[i]=0即可,没什么难的

    • 差为定值

      • 全遍历

        \[\]

        \[\]

        \[\]

        \[\]

      \[ a'_i=\sum_{j\le i} b'_j c_{i-j} \]

      考虑实现,相当于std::reverse(b,b+n+1)和std::reverse(a,a+n+1)。

      注意到我们reverse的东西和上下界,a得到的范围和breverse的范围是一样的。

      • \(j\in[l,r]\cap [0,i]\)

        同理

  • 同余号

    道理都是一样的,可以看做是时刻维护长度\(< \mod {}\)的数组。

​

posted @ 2020-01-07 22:56  谁是鸽王  阅读(235)  评论(0)    收藏  举报