【总结】不同卷积如何来搞
md老子又tmd卷积构造错调一天,我来向smy && 高哥学习,总结一下不同的形式如何卷积
-
等号
-
和为定值
-
从0到上界全遍历
[a_i=sum_{j=0}^i b_j c_{i-j} ]最简单的形式,也是最基础的形式
-
(jin[l,r]cap [0,i])
此时由于(j)有这样的限制,也就是意思是(b[])只有([l,r])有值,令其他b[i]=0即可,没什么难的
-
-
差为定值
- 全遍历[][][][]
[ a'_i=sum_{jle i} b'_j c_{i-j} ]考虑实现,相当于`std::reverse(b,b+n+1)`和`std::reverse(a,a+n+1)`。 注意到我们`reverse`的东西和上下界,a得到的范围和b`reverse`的范围是一样的。
-
(jin[l,r]cap [0,i])
同理
- 全遍历
-
-
同余号
道理都是一样的,可以看做是时刻维护长度(< mod {})的数组。