constexpr ll bases32[] = {2, 7, 61}; constexpr ll bases64[] = {2, 325, 9375, 28178, 450775, 9780504, 1795265022}; bool isPrime(ll n) { if (n < 2 || n % 2 == 0) return n == 2; ll d = n - 1, j = 0; while (d % 2 == 0) d /= 2, j++; for (ll a : bases64) { if (a % n == 0) continue; ll v = powMod(a, d, n); //with mulmod or int128 if (v == 1 || v == n - 1) continue; for (ll i = 1; i <= j; i++) { v = ((lll)v * v) % n; if (v == n - 1 || v <= 1) break; } if (v != n - 1) return false; } return true; } 'logo' rowspan='2'>cgit logo index : tcr
Team Contest Reference
summaryrefslogtreecommitdiff
path: root/content/other/pbs.cpp
blob: e6bfeac32208ddf20310fcb2dbc79514487696fc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// Q = # of queries, bucket sort is sometimes faster
vector<int> low(Q, -1), high(Q, MAX_OPERATIONS);
while (true) {
	vector<pair<int, int>> focus;
	for (int i = 0; i < Q; i++) {
		if (low[i] + 1 < high[i]) {
			focus.emplace_back((low[i] + high[i]) / 2, i);
	}}
	if (focus.empty()) break;
	ranges::sort(focus);

	// reset simulation
	for (int step = 0; auto [mid, i] : focus) {
		for (; step <= mid; step++) {
			// simulation step
		}
		if (/* requirement already fulfilled */) high[i] = mid;
		else low[i] = mid;
}} // answer in low (MAX_OPERATIONS if never ok)