Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions .verify-helper/timestamps.remote.json
Original file line number Diff line number Diff line change
Expand Up @@ -37,14 +37,14 @@
"tests/library_checker_aizu_tests/data_structures/rmq_linear.test.cpp": "2026-03-09 12:21:26 -0600",
"tests/library_checker_aizu_tests/data_structures/rmq_sparse_table.test.cpp": "2026-03-09 12:21:26 -0600",
"tests/library_checker_aizu_tests/data_structures/rmq_sparse_table_inc.test.cpp": "2026-01-18 11:15:41 +0000",
"tests/library_checker_aizu_tests/data_structures/simple_tree.test.cpp": "2026-03-25 22:10:17 -0600",
"tests/library_checker_aizu_tests/data_structures/simple_tree.test.cpp": "2026-04-04 12:45:20 -0600",
"tests/library_checker_aizu_tests/data_structures/simple_tree_inc.test.cpp": "2026-03-25 22:10:17 -0600",
"tests/library_checker_aizu_tests/data_structures/simple_tree_inc_line.test.cpp": "2026-03-25 22:10:17 -0600",
"tests/library_checker_aizu_tests/data_structures/simple_tree_inc_queue.test.cpp": "2026-03-25 22:10:17 -0600",
"tests/library_checker_aizu_tests/data_structures/simple_tree_inc_walk.test.cpp": "2026-03-25 22:10:17 -0600",
"tests/library_checker_aizu_tests/data_structures/simple_tree_line.test.cpp": "2026-03-25 22:10:17 -0600",
"tests/library_checker_aizu_tests/data_structures/simple_tree_queue.test.cpp": "2026-03-25 22:10:17 -0600",
"tests/library_checker_aizu_tests/data_structures/simple_tree_walk.test.cpp": "2026-03-25 22:10:17 -0600",
"tests/library_checker_aizu_tests/data_structures/simple_tree_line.test.cpp": "2026-04-04 12:45:20 -0600",
"tests/library_checker_aizu_tests/data_structures/simple_tree_queue.test.cpp": "2026-04-04 12:45:20 -0600",
"tests/library_checker_aizu_tests/data_structures/simple_tree_walk.test.cpp": "2026-04-04 12:45:20 -0600",
"tests/library_checker_aizu_tests/dsu/dsu.test.cpp": "2026-02-27 15:26:53 -0700",
"tests/library_checker_aizu_tests/dsu/dsu_bipartite.test.cpp": "2026-03-06 16:06:56 -0700",
"tests/library_checker_aizu_tests/dsu/dsu_weighted_aizu.test.cpp": "2026-03-06 16:06:56 -0700",
Expand Down
2 changes: 1 addition & 1 deletion library/data_structures_[l,r)/bit_uncommon/walk_lambda.hpp
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
void walk(const auto& f) {
void walk(auto f) {
ll sum = 0;
for (int i = bit_floor(size(s)), r = 0; i; i /= 2)
if (r + i <= sz(s) && f(r + i, sum + s[r + i - 1]))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,21 +25,20 @@
//! such element exists then `r` is returned
//! @time O(log(n))
//! @space O(log(n)) for recursion stack
int find_first(int l, int r, const auto& f) {
int find_first(int l, int r, auto f) {
return find_first_in_range(l, r, f, 0, n, 1);
}
//! invariant: f(tree[v], tl, tr) is 1
int find_first_in_subtree(const auto& f, int tl, int tr,
int v) {
int find_first_in_subtree(auto f, int tl, int tr, int v) {
if (v >= n) return tl;
int tm = split(tl, tr);
push(tl, tm, tr, v);
if (f(tree[2 * v], tl, tm))
return find_first_in_subtree(f, tl, tm, 2 * v);
return find_first_in_subtree(f, tm, tr, 2 * v + 1);
}
int find_first_in_range(int l, int r, const auto& f,
int tl, int tr, int v) {
int find_first_in_range(int l, int r, auto f, int tl,
int tr, int v) {
if (r <= tl || tr <= l) return r;
if (l <= tl && tr <= r)
return f(tree[v], tl, tr)
Expand Down
7 changes: 3 additions & 4 deletions library/data_structures_[l,r)/seg_tree_uncommon/find_last.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -25,20 +25,19 @@
//! such element exists then (l - 1) is returned
//! @time O(log(n))
//! @space O(log(n)) for recursion stack
int find_last(int l, int r, const auto& f) {
int find_last(int l, int r, auto f) {
return find_last_in_range(l, r, f, 0, n, 1);
}
//! invariant: f(tree[v], tl, tr) is 1
int find_last_in_subtree(const auto& f, int tl, int tr,
int v) {
int find_last_in_subtree(auto f, int tl, int tr, int v) {
if (v >= n) return tl;
int tm = split(tl, tr);
push(tl, tm, tr, v);
if (f(tree[2 * v + 1], tm, tr))
return find_last_in_subtree(f, tm, tr, 2 * v + 1);
return find_last_in_subtree(f, tl, tm, 2 * v);
}
int find_last_in_range(int l, int r, const auto& f, int tl,
int find_last_in_range(int l, int r, auto f, int tl,
int tr, int v) {
if (r <= tl || tr <= l) return l - 1;
if (l <= tl && tr <= r)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
void max_right(int l, int r, const auto& f) {
void max_right(int l, int r, auto f) {
for (T x = unit; l < r;) {
int u = l + n, v = __lg(min(u & -u, r - l)),
m = l + (1 << v);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
void min_left(int l, int r, const auto& f) {
void min_left(int l, int r, auto f) {
for (T x = unit; l < r;) {
int u = r + n, v = __lg(min(u & -u, r - l)),
m = r - (1 << v);
Expand Down
2 changes: 1 addition & 1 deletion library/data_structures_[l,r]/bit_uncommon/walk_lambda.hpp
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
void walk(const auto& f) {
void walk(auto f) {
ll sum = 0;
for (int i = bit_floor(size(s)), r = 0; i; i /= 2)
if (r + i <= sz(s) && f(r + i - 1, sum + s[r + i - 1]))
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
void max_right(int l, int r, const auto& f) {
void max_right(int l, int r, auto f) {
if (T x = s[l + n]; f(l, x))
for (l++; l <= r;) {
int u = l + n, v = __lg(min(u & -u, r - l + 1)),
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
int min_left(int l, int r, const auto& f) {
int min_left(int l, int r, auto f) {
if (T x = s[r + n]; f(r, x))
for (r--; l <= r;) {
int u = r + 1 + n, v = __lg(min(u & -u, r - l + 1)),
Expand Down
4 changes: 2 additions & 2 deletions library/dsu/range_parallel_dsu.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,12 @@
struct rp_dsu {
vector<DSU> dsus;
rp_dsu(int n): dsus(bit_width(n + 0u), DSU(n)) {}
void join(int u, int v, int len, const auto& f) {
void join(int u, int v, int len, auto f) {
int i = __lg(len);
join(u, v, f, i);
join(u + len - (1 << i), v + len - (1 << i), f, i);
}
void join(int u, int v, const auto& f, int i) {
void join(int u, int v, auto f, int i) {
if (!dsus[i].join(u, v)) return;
if (i == 0) return f(u, v);
i--;
Expand Down
2 changes: 1 addition & 1 deletion library/monotonic_stack/monotonic_stack.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
//! a[le[i]] < a[i]
//! @time O(n)
//! @space O(n)
vi mono_st(const auto& a, const auto& cmp) {
vi mono_st(const auto& a, auto cmp) {
vi l(sz(a));
rep(i, 0, sz(a)) for (l[i] = i - 1;
l[i] >= 0 && !cmp(a[l[i]], a[i]);) l[i] = l[l[i]];
Expand Down
2 changes: 1 addition & 1 deletion library/trees/centroid_decomp.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
//! @endcode
//! @time O(n log n)
//! @space O(n)
void centroid(auto& adj, const auto& f) {
void centroid(auto& adj, auto f) {
vi siz(sz(adj));
auto calc_sz = [&](auto&& self, int u, int p) -> void {
siz[u] = 1;
Expand Down
3 changes: 1 addition & 2 deletions library/trees/edge_cd.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,7 @@
//! handle single-edge-paths separately
//! @time O(n logφ n)
//! @space O(n)
template<class G>
void edge_cd(vector<G>& adj, const auto& f) {
template<class G> void edge_cd(vector<G>& adj, auto f) {
vi siz(sz(adj));
auto find_cent = [&](auto&& self, int u, int p,
int m) -> int {
Expand Down
Loading