competitive/math/bitwise_transform.rs
1pub fn bitwise_transform<T, F>(x: &mut [T], mut f: F)
2where
3 F: FnMut(&mut T, &mut T),
4{
5 let k = x.len().trailing_zeros() as usize;
6 assert!(x.len() == 1 << k);
7 for i in 0..k {
8 for a in x.chunks_exact_mut(2 << i) {
9 let (x, y) = a.split_at_mut(1 << i);
10 for (x, y) in x.iter_mut().zip(y.iter_mut()) {
11 f(x, y);
12 }
13 }
14 }
15}