标签:总结 std reverse 卷积 sum cap 定值 如何
【总结】不同卷积如何来搞
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=i}^n b_{j-i}a_j \]
分别用\(n-i,n-j\)替换\(i,j\)即可
\[ a_{i}=\sum_{n-j=n-i}^n b_{i-j}a_j \]
此时你可以发现\(j+n-i-j=n-i\),符号最前面那种形式。这可以看做是\(i\)位置上的值其实是\(b_{n-i}\),所以具体操作是将std::reverse(b,b+n+1)
,然后卷积到一起之后我们得到的是\(a_{n-i}\)我们记得要std::reverse(a,a+n+1)
,注意这些std::reverse()
的上下界,这些上下界搞错相当于卷积直接就是错的,要引起注意!\(j\in[l,r]\cap [0,i]\)
同理
同余号
道理都是一样的,可以看做是时刻维护长度\(< \mod {}\)的数组。
标签:总结,std,reverse,卷积,sum,cap,定值,如何 来源: https://www.cnblogs.com/winlere/p/12164223.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。