高维前缀和

Posted wasa855

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了高维前缀和相关的知识,希望对你有一定的参考价值。

其实我也不知道是不是叫这个名字。


假设有一个数组 (a_0,a_1,...,a_{2^n}) ,求一个数组 (b_x=sumlimits_{i|x=x} a_i) ,即子集和。(妈呀不就是 fwt_or吗)

先上代码:

for(int i=0;i<n;i++)
{
	for(int j=0;j<(1<<n);j++)
	{
		if(j&(1<<i)) a[j]+=a[j^(1<<i)];
	}
}

原理:从小到大枚举每一位,然后合并。

如图,显然他是正确的(从下往上看)。

技术图片


假设有一个数组 (a_0,a_1,...,a_{2^n}) ,求一个数组 (b_x=sumlimits_{i&x=x} a_i) ,即超集和。(妈呀不就是 fwt_and吗)

先上代码:

for(int i=0;i<n;i++)
{
	for(int j=0;j<(1<<n);j++)
	{
		if(!(j&(1<<i))) a[j]+=a[j^(1<<i)];
	}
}

原理:从小到大枚举每一位,然后合并。

如果不理解,可以画图手玩。


不是有 fwt 了吗,要这个干什么 。

发现他的性质非常优,不仅可以维护和,积,(max,min) 等支持结合律操作都可以维护。


题目:CF449D (但是先挖个坑,两天内来填)

以上是关于高维前缀和的主要内容,如果未能解决你的问题,请参考以下文章

高维前缀和

HDU5765 Bonds (高维前缀和)

高维前缀和

高维前缀和

高维前缀和

hihocoder1496(高维前缀和)