2
2
#define PROBLEM " https://judge.yosupo.jp/problem/many_factorials"
3
3
#pragma GCC optimize("Ofast,unroll-loops")
4
4
#include < bits/stdc++.h>
5
+ #define CP_ALGO_CHECKPOINT
6
+ #include " cp-algo/util/checkpoint.hpp"
5
7
#include " blazingio/blazingio.min.hpp"
6
8
#include " cp-algo/util/simd.hpp"
7
9
#include " cp-algo/math/common.hpp"
@@ -25,6 +27,7 @@ void facts_inplace(vector<int> &args) {
25
27
args_per_block[(mod - x - 1 ) / block].push_back (i);
26
28
}
27
29
}
30
+ cp_algo::checkpoint (" init" );
28
31
uint32_t b2x32 = (1ULL << 32 ) % mod;
29
32
uint64_t fact = 1 ;
30
33
const int accum = 4 ;
@@ -49,6 +52,7 @@ void facts_inplace(vector<int> &args) {
49
52
prods[z][i] = montgomery_mul (prods[z][i - 1 ], cur[z], mod, imod);
50
53
}
51
54
}
55
+ cp_algo::checkpoint (" inner loop" );
52
56
for (int z = 0 ; z < accum; z++) {
53
57
uint64_t bl = b + z * block;
54
58
for (auto i: args_per_block[bl / block]) {
@@ -75,6 +79,7 @@ void facts_inplace(vector<int> &args) {
75
79
fact = fact * prods[z].back ()[j] % mod;
76
80
}
77
81
}
82
+ cp_algo::checkpoint (" write ans" );
78
83
}
79
84
}
80
85
@@ -83,8 +88,11 @@ void solve() {
83
88
cin >> n;
84
89
vector<int > args (n);
85
90
for (auto &x : args) {cin >> x;}
91
+ cp_algo::checkpoint (" input read" );
86
92
facts_inplace (args);
87
93
for (auto it: args) {cout << it << " \n " ;}
94
+ cp_algo::checkpoint (" output written" );
95
+ cp_algo::checkpoint<1 >();
88
96
}
89
97
90
98
signed main () {
0 commit comments