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

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

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得到的范围和b`reverse`的范围是一样的。
      
      • \(j\in[l,r]\cap [0,i]\)

        同理

  • 同余号

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

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