FWT
jys
posted @ Jul 13, 2014 06:10:18 PM
in 未分类
, 943 阅读
背代码如下
XOR:+,-
AND:+,
OR: ,+
#include <cstdio> #include <cstdlib> #include <cstring> #include <iostream> #include <algorithm> using namespace std; int a[100001],ta[100001]; int b[100001],tb[100001]; int c[100001],tc[100001]; int pusu[100001]; void fwt(int x[],int l,int r) { if(l+1==r)return; int mid=(l+r)>>1; fwt(x,l,mid); fwt(x,mid,r); for(int i=l;i<mid;i++) x[i]+=x[i-l+mid]; } void rfwt(int x[],int l,int r) { if(l+1==r)return; int mid=(l+r)>>1; for(int i=l;i<mid;i++) x[i]-=x[i-l+mid]; rfwt(x,l,mid); rfwt(x,mid,r); }
需要注意:1、区间左开右闭 2、原地执行算法
用这种写法上FFT好像挺科学的。。