7void FFT(vector<complex<
double>>& a,
bool inv=
false) {
10 for(
int i=0; i<n; i++) {
13 for(
int k=0; k<h; k++) j|=(i>>k&1)<<(h-1-k);
14 if(i<j) swap(a[i],a[j]);
17 for(
int b=1; b<n; b<<=1) {
18 for(
int j=0; j<b; j++) {
22 complex<
double> w=polar(1.0,(2.0*M_PI)/(2.0*b)*j*(inv?1:-1));
24 for(
int k=0; k<n; k+=b*2) {
25 complex<
double> s=a[j+k], t=a[j+k+b]*w;
26 a[j+k]=s+t; a[j+k+b]=s-t;
31 if(inv)
for(
int i=0; i<n; i++) a[i]/=n;
38 while(n+1<a.size()+b.size()) n*=2;
39 vector<complex<
double>> fa(n), fb(n);
40 for(
int i=0; i<a.size(); i++) fa[i]=a[i];
41 for(
int i=0; i<b.size(); i++) fb[i]=b[i];
46 for(
int i=0; i<n; i++) fa[i]*=fb[i];
50 vector<
double> ret(n);
for(
int i=0; i<n; i++) ret[i]=fa[i].real();