summaryrefslogtreecommitdiff
path: root/content/other/pbs.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'content/other/pbs.cpp')
-rw-r--r--content/other/pbs.cpp19
1 files changed, 19 insertions, 0 deletions
diff --git a/content/other/pbs.cpp b/content/other/pbs.cpp
new file mode 100644
index 0000000..7cb60e5
--- /dev/null
+++ b/content/other/pbs.cpp
@@ -0,0 +1,19 @@
+// Q = # of queries, bucket sort is sometimes faster
+vector<int> low(Q, 0), high(Q, MAX_OPERATIONS);
+while (true) {
+ vector<pair<int, int>> focus;
+ for (int i = 0; i < Q; i++) if (low[i] < high[i]) {
+ focus.emplace_back((low[i] + high[i]) / 2, i);
+ }
+ if (focus.empty()) break;
+ sort(all(focus));
+
+ // reset simulation
+ for (int step = 0; auto [mid, i] : focus) {
+ while (step <= mid) {
+ // simulation step
+ step++;
+ }
+ if (/* requirement already fulfilled */) high[i] = mid;
+ else low[i] = mid + 1;
+}} // answer in low (and high)