@@ -12,15 +12,16 @@ using cp_algo::structures::bitpack;
12
12
const int maxn = 1 << 12 ;
13
13
bitpack<maxn> a[maxn], b[maxn], c[maxn];
14
14
const int K = 8 ;
15
- bitpack<maxn> precalc[maxn / K][ 1 << K];
15
+ bitpack<maxn> precalc[1 << K];
16
16
17
- void process_precalc () {
18
- for (int i = 0 ; i < maxn / K; i++) {
19
- for (int j = 0 ; j < K; j++) {
20
- int step = 1 << j;
21
- for (int k = 0 ; k < step; k++) {
22
- precalc[i][k + step] = precalc[i][k] ^ b[K * i + j];
23
- }
17
+ void process_precalc (int i) {
18
+ for (auto &it: precalc) {
19
+ it = bitpack<maxn>();
20
+ }
21
+ for (int j = 0 ; j < K; j++) {
22
+ int step = 1 << j;
23
+ for (int k = 0 ; k < step; k++) {
24
+ precalc[k + step] = precalc[k] ^ b[K * i + j];
24
25
}
25
26
}
26
27
}
@@ -39,12 +40,11 @@ void solve() {
39
40
b[i] = row;
40
41
}
41
42
cp_algo::checkpoint (" read" );
42
- process_precalc ();
43
- cp_algo::checkpoint (" precalc" );
44
43
for (int j = 0 ; j < m; j += 64 ) {
45
44
for (int z = 0 ; z < 64 / K; z++) {
45
+ process_precalc (j / K + z);
46
46
for (int i = 0 ; i < n; i++) {
47
- c[i] ^= precalc[j / K + z][ uint8_t (a[i].word (j / 64 ) >> K * z)];
47
+ c[i] ^= precalc[uint8_t (a[i].word (j / 64 ) >> K * z)];
48
48
}
49
49
}
50
50
}
0 commit comments