This documentation is automatically generated by competitive-verifier/competitive-verifier
#include "convolution/generalized_convolution.hpp"
#pragma once
template <typename T, auto transform, auto inv_transform>
vector<T> generalized_convolution(vector<T> a, vector<T> b) {
const int n = a.size();
transform(a);
transform(b);
for (int i = 0; i < n; ++i) {
a[i] *= b[i];
}
inv_transform(a);
return a;
}
#line 2 "convolution/generalized_convolution.hpp"
template <typename T, auto transform, auto inv_transform>
vector<T> generalized_convolution(vector<T> a, vector<T> b) {
const int n = a.size();
transform(a);
transform(b);
for (int i = 0; i < n; ++i) {
a[i] *= b[i];
}
inv_transform(a);
return a;
}