From d8423aed8b2a8439dc7e2199b3275db440cebcd5 Mon Sep 17 00:00:00 2001 From: Luke Videckis Date: Fri, 24 Jan 2025 10:59:16 -0700 Subject: [PATCH 01/36] change push_back to += for basic strings --- library/contest/dynamic_bitset.hpp | 2 +- .../uncommon/priority_queue_of_updates.hpp | 2 +- library/graphs/bridges_cuts/bridges.hpp | 4 ++-- library/graphs/bridges_cuts/cuts.hpp | 4 ++-- library/graphs/hopcroft_karp.hpp | 2 +- .../offline_incremental_scc.hpp | 2 +- library/loops/chooses.hpp | 2 +- library/loops/submasks.hpp | 2 +- library/loops/supermasks.hpp | 2 +- library/math/matrix_related/xor_basis_unordered.hpp | 2 +- .../matrix_related/xor_basis_unordered_intersection.hpp | 4 ++-- library/math/partitions.hpp | 2 +- library/math/prime_sieve/mobius.hpp | 2 +- library/monotonic_stack/cartesian_binary_tree.hpp | 3 +-- library/monotonic_stack/monotonic_stack.hpp | 5 ++--- library/strings/suffix_array/find/find_string_bs_fast.hpp | 2 +- library/strings/suffix_array/suffix_array.hpp | 2 +- library/strings/suffix_array/suffix_array_short.hpp | 2 +- .../data_structures/line_tree_aizu.test.cpp | 4 ++-- .../data_structures/line_tree_lib_checker.test.cpp | 2 +- .../data_structures/persistent_queue_tree.test.cpp | 2 +- .../graphs/offline_incremental_scc.test.cpp | 8 ++++---- .../graphs/strongly_connected_components_aizu.test.cpp | 2 -- .../strongly_connected_components_lib_checker.test.cpp | 5 ++--- tests/library_checker_aizu_tests/math/xor_basis.test.cpp | 2 +- .../strings/prefix_function.test.cpp | 4 ++-- 26 files changed, 35 insertions(+), 40 deletions(-) diff --git a/library/contest/dynamic_bitset.hpp b/library/contest/dynamic_bitset.hpp index e68446d7..c8f1d421 100644 --- a/library/contest/dynamic_bitset.hpp +++ b/library/contest/dynamic_bitset.hpp @@ -18,7 +18,7 @@ void f() { bs.push_back(0); cerr << bs << endl; for (int i = bs.find_first(); i != ssize(bs); - i = bs.find_next(i)) + i = bs.find_next(i)) cerr << i << endl; bs -= bs; // bs &= ~bs; } diff --git a/library/data_structures/uncommon/priority_queue_of_updates.hpp b/library/data_structures/uncommon/priority_queue_of_updates.hpp index 146aac0e..7796a03d 100644 --- a/library/data_structures/uncommon/priority_queue_of_updates.hpp +++ b/library/data_structures/uncommon/priority_queue_of_updates.hpp @@ -34,7 +34,7 @@ template struct pq_updates { vector extra; int idx = sz(upd_st) - 1, lowest_pri = INT_MAX; for (auto it = rbegin(mp); - 2 * sz(extra) < sz(upd_st) - idx; it++) { + 2 * sz(extra) < sz(upd_st) - idx; it++) { auto [pri, idx_sk] = *it; extra.push_back(upd_st[idx_sk]); idx = min(idx, idx_sk), lowest_pri = pri; diff --git a/library/graphs/bridges_cuts/bridges.hpp b/library/graphs/bridges_cuts/bridges.hpp index dfed7d03..5d1093d8 100644 --- a/library/graphs/bridges_cuts/bridges.hpp +++ b/library/graphs/bridges_cuts/bridges.hpp @@ -10,8 +10,8 @@ //! int u, v; //! cin >> u >> v; //! u--, v--; -//! adj[u].push_back({v, i}); -//! adj[v].push_back({u, i}); +//! adj[u] += {v, i}; +//! adj[v] += {u, i}; //! } //! auto [num_ccs, br_id, is_br] = bridges(adj, m); //! @endcode diff --git a/library/graphs/bridges_cuts/cuts.hpp b/library/graphs/bridges_cuts/cuts.hpp index 8aa7df2c..0a636e06 100644 --- a/library/graphs/bridges_cuts/cuts.hpp +++ b/library/graphs/bridges_cuts/cuts.hpp @@ -11,8 +11,8 @@ //! cin >> u >> v; //! u--, v--; //! //self edges not allowed -//! adj[u].push_back({v, i}); -//! adj[v].push_back({u, i}); +//! adj[u] += {v, i}; +//! adj[v] += {u, i}; //! } //! auto [num_bccs, bcc_id, is_cut] = cuts(adj, m); //! @endcode diff --git a/library/graphs/hopcroft_karp.hpp b/library/graphs/hopcroft_karp.hpp index a97501b9..8b63b7e0 100644 --- a/library/graphs/hopcroft_karp.hpp +++ b/library/graphs/hopcroft_karp.hpp @@ -7,7 +7,7 @@ //! mvc_l, mvc_r] = hopcroft_karp(adj, rsz); //! } //! vector> adj(lsz); -//! adj[l].push_back(r); // add edge l <-> r +//! adj[l] += r; // add edge l <-> r //! // 0<=l> eds, adj.emplace_back(); } u = ids[u], v = ids[v]; - if (*it <= mid) adj[u].push_back(v); + if (*it <= mid) adj[u] += v; } rep(i, 0, sz(adj)) ids[vs[i]] = -1; scc_id = sccs(adj).second; diff --git a/library/loops/chooses.hpp b/library/loops/chooses.hpp index 5f932355..3b98c752 100644 --- a/library/loops/chooses.hpp +++ b/library/loops/chooses.hpp @@ -5,4 +5,4 @@ //! @time O(n choose k) //! @space O(1) for (int mask = (1 << k) - 1; mask < (1 << n); - mask = next_subset(mask)) + mask = next_subset(mask)) diff --git a/library/loops/submasks.hpp b/library/loops/submasks.hpp index 6216f537..200777c1 100644 --- a/library/loops/submasks.hpp +++ b/library/loops/submasks.hpp @@ -5,4 +5,4 @@ //! of every mask of size n //! @space O(1) for (int submask = mask; submask; - submask = (submask - 1) & mask) + submask = (submask - 1) & mask) diff --git a/library/loops/supermasks.hpp b/library/loops/supermasks.hpp index 9b468e3a..05864afc 100644 --- a/library/loops/supermasks.hpp +++ b/library/loops/supermasks.hpp @@ -6,4 +6,4 @@ //! of every mask of size n //! @space O(1) for (int supermask = mask; supermask < (1 << n); - supermask = (supermask + 1) | mask) + supermask = (supermask + 1) | mask) diff --git a/library/math/matrix_related/xor_basis_unordered.hpp b/library/math/matrix_related/xor_basis_unordered.hpp index c1c85a4d..ba884bdb 100644 --- a/library/math/matrix_related/xor_basis_unordered.hpp +++ b/library/math/matrix_related/xor_basis_unordered.hpp @@ -17,6 +17,6 @@ template struct basis { return v; } bool insert(T v) { - return (v = shrink(v)) ? b.push_back(v), 1 : 0; + return (v = shrink(v)) ? b += v, 1 : 0; } }; diff --git a/library/math/matrix_related/xor_basis_unordered_intersection.hpp b/library/math/matrix_related/xor_basis_unordered_intersection.hpp index e6ac47b9..15dceaf6 100644 --- a/library/math/matrix_related/xor_basis_unordered_intersection.hpp +++ b/library/math/matrix_related/xor_basis_unordered_intersection.hpp @@ -7,13 +7,13 @@ template basis intersection(const basis& u, const basis& v) { basic_string> w; - for (T e : u.b) w.push_back({e, e}); + for (T e : u.b) w += {e, e}; basis res; for (T e : v.b) { T s = 0; for (auto [x, y] : w) if ((e ^ x) < e) e ^= x, s ^= y; - if (e) w.push_back({e, s}); + if (e) w += {e, s}; else res.insert(s); } return res; diff --git a/library/math/partitions.hpp b/library/math/partitions.hpp index fd6d350c..822ed670 100644 --- a/library/math/partitions.hpp +++ b/library/math/partitions.hpp @@ -12,7 +12,7 @@ vector partitions(int n) { rep(i, 1, n) { ll sum = 0; for (int j = 1, pent = 1, sign = 1; pent <= i; - j++, pent += 3 * j - 2, sign = -sign) { + j++, pent += 3 * j - 2, sign = -sign) { if (pent + j <= i) sum += dp[i - pent - j] * sign + mod; sum += dp[i - pent] * sign + mod; diff --git a/library/math/prime_sieve/mobius.hpp b/library/math/prime_sieve/mobius.hpp index 00b8e182..433e77bd 100644 --- a/library/math/prime_sieve/mobius.hpp +++ b/library/math/prime_sieve/mobius.hpp @@ -4,4 +4,4 @@ vi mobius(100'005); mobius[1] = 1; rep(i, 1, sz(mobius)) for (int j = i + i; j < sz(mobius); - j += i) mobius[j] -= mobius[i]; + j += i) mobius[j] -= mobius[i]; diff --git a/library/monotonic_stack/cartesian_binary_tree.hpp b/library/monotonic_stack/cartesian_binary_tree.hpp index b9bad14a..67355f4e 100644 --- a/library/monotonic_stack/cartesian_binary_tree.hpp +++ b/library/monotonic_stack/cartesian_binary_tree.hpp @@ -24,7 +24,6 @@ vi cart_binary_tree(const vi& l) { vi p(l); rep(i, 0, sz(p)) for (int j = i - 1; j != l[i]; - j = l[j]) if (l[j] == l[i]) p[j] = - i; + j = l[j]) if (l[j] == l[i]) p[j] = i; return p; } diff --git a/library/monotonic_stack/monotonic_stack.hpp b/library/monotonic_stack/monotonic_stack.hpp index 42615a62..f17529d4 100644 --- a/library/monotonic_stack/monotonic_stack.hpp +++ b/library/monotonic_stack/monotonic_stack.hpp @@ -9,8 +9,7 @@ //! @space O(n) 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]]; + rep(i, 0, sz(a)) for (l[i] = i - 1; + l[i] >= 0 && !cmp(a[l[i]], a[i]);) l[i] = l[l[i]]; return l; } diff --git a/library/strings/suffix_array/find/find_string_bs_fast.hpp b/library/strings/suffix_array/find/find_string_bs_fast.hpp index d2998fbf..1f43f0f3 100644 --- a/library/strings/suffix_array/find/find_string_bs_fast.hpp +++ b/library/strings/suffix_array/find/find_string_bs_fast.hpp @@ -8,7 +8,7 @@ match find_str_fast(const T& t) { int s_l = n, s_len = 0; auto cmp = [&](int i, int) -> bool { if (int lcp_len = s_l == n ? 0 : len_lcp(s_l, i); - lcp_len != s_len) + lcp_len != s_len) return (lcp_len < s_len) ^ (cmp_sufs(s_l, i) < 0); auto [it_s, it_t] = mismatch(i + s_len + all(s), s_len + all(t)); diff --git a/library/strings/suffix_array/suffix_array.hpp b/library/strings/suffix_array/suffix_array.hpp index 34b80a80..8ce1278f 100644 --- a/library/strings/suffix_array/suffix_array.hpp +++ b/library/strings/suffix_array/suffix_array.hpp @@ -62,7 +62,7 @@ auto get_sa(const auto& s, int max_num) { if (sz > 0) sz--; if (sa_inv[i] == 0) continue; for (int j = sa[sa_inv[i] - 1]; - max(i, j) + sz < n && s[i + sz] == s[j + sz];) + max(i, j) + sz < n && s[i + sz] == s[j + sz];) sz++; lcp[sa_inv[i] - 1] = sz; } diff --git a/library/strings/suffix_array/suffix_array_short.hpp b/library/strings/suffix_array/suffix_array_short.hpp index 94ed3382..cb0a7f34 100644 --- a/library/strings/suffix_array/suffix_array_short.hpp +++ b/library/strings/suffix_array/suffix_array_short.hpp @@ -29,7 +29,7 @@ auto sa_short(const auto& s) { if (sz > 0) sz--; if (sa_inv[i] == 0) continue; for (int j = sa[sa_inv[i] - 1]; - max(i, j) + sz < n && s[i + sz] == s[j + sz];) + max(i, j) + sz < n && s[i + sz] == s[j + sz];) sz++; lcp[sa_inv[i] - 1] = sz; } diff --git a/tests/library_checker_aizu_tests/data_structures/line_tree_aizu.test.cpp b/tests/library_checker_aizu_tests/data_structures/line_tree_aizu.test.cpp index e94131bf..d9400ddf 100644 --- a/tests/library_checker_aizu_tests/data_structures/line_tree_aizu.test.cpp +++ b/tests/library_checker_aizu_tests/data_structures/line_tree_aizu.test.cpp @@ -29,8 +29,8 @@ int main() { vector edge_weights; vector to_time(n); for (int v = lt.find(0), timer = 1; - lt.edge[v] != pii{-1, -1}; - v = lt.edge[v].first, timer++) { + lt.edge[v] != pii{-1, -1}; + v = lt.edge[v].first, timer++) { edge_weights.push_back(w_eds[lt.edge[v].second][0]); to_time[lt.edge[v].first] = timer; mst_sum += w_eds[lt.edge[v].second][0]; diff --git a/tests/library_checker_aizu_tests/data_structures/line_tree_lib_checker.test.cpp b/tests/library_checker_aizu_tests/data_structures/line_tree_lib_checker.test.cpp index 7a983423..2b6acb51 100644 --- a/tests/library_checker_aizu_tests/data_structures/line_tree_lib_checker.test.cpp +++ b/tests/library_checker_aizu_tests/data_structures/line_tree_lib_checker.test.cpp @@ -23,7 +23,7 @@ int main() { int64_t cost = 0; vector ids; for (int v = lt.find(0); lt.edge[v].first != -1; - v = lt.edge[v].first) { + v = lt.edge[v].first) { ids.push_back(w_eds[lt.edge[v].second][0]); cost += weights[w_eds[lt.edge[v].second][0]]; } diff --git a/tests/library_checker_aizu_tests/data_structures/persistent_queue_tree.test.cpp b/tests/library_checker_aizu_tests/data_structures/persistent_queue_tree.test.cpp index 0695c400..321e58e5 100644 --- a/tests/library_checker_aizu_tests/data_structures/persistent_queue_tree.test.cpp +++ b/tests/library_checker_aizu_tests/data_structures/persistent_queue_tree.test.cpp @@ -11,7 +11,7 @@ int main() { // bounds[version] = [left index, right index) represents // subarray range of queue for (int curr_version = 1; curr_version <= q; - curr_version++) { + curr_version++) { int type; cin >> type; if (type == 0) { diff --git a/tests/library_checker_aizu_tests/graphs/offline_incremental_scc.test.cpp b/tests/library_checker_aizu_tests/graphs/offline_incremental_scc.test.cpp index d7fc10ce..05bd7fcd 100644 --- a/tests/library_checker_aizu_tests/graphs/offline_incremental_scc.test.cpp +++ b/tests/library_checker_aizu_tests/graphs/offline_incremental_scc.test.cpp @@ -1,10 +1,9 @@ -#define PROBLEM "https://judge.yosupo.jp/problem/incremental_scc" +#define PROBLEM \ + "https://judge.yosupo.jp/problem/incremental_scc" #include "../template.hpp" - #include "../../../library/graphs/strongly_connected_components/offline_incremental_scc.hpp" #include "../../../kactl/content/data-structures/UnionFind.h" #include "../../../library/math/mod_int.hpp" - int main() { cin.tie(0)->sync_with_stdio(0); int n, m; @@ -19,7 +18,8 @@ int main() { assert((eds[t][0] == eds[t][1]) == (joins[t] == -1)); vector order(m); iota(all(order), 0); - ranges::sort(all(order), {}, [&](int i) { return joins[i]; }); + ranges::sort(all(order), {}, + [&](int i) { return joins[i]; }); UF uf(n); mint sum = 0; for (int t = 0, it = 0; t < m; t++) { diff --git a/tests/library_checker_aizu_tests/graphs/strongly_connected_components_aizu.test.cpp b/tests/library_checker_aizu_tests/graphs/strongly_connected_components_aizu.test.cpp index a919230a..9da0c857 100644 --- a/tests/library_checker_aizu_tests/graphs/strongly_connected_components_aizu.test.cpp +++ b/tests/library_checker_aizu_tests/graphs/strongly_connected_components_aizu.test.cpp @@ -1,10 +1,8 @@ #define PROBLEM \ "https://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=GRL_3_C" #include "../template.hpp" - #include "../../../library/graphs/strongly_connected_components/add_edges_strongly_connected.hpp" #include "../scc_asserts.hpp" - int main() { cin.tie(0)->sync_with_stdio(0); int n, m; diff --git a/tests/library_checker_aizu_tests/graphs/strongly_connected_components_lib_checker.test.cpp b/tests/library_checker_aizu_tests/graphs/strongly_connected_components_lib_checker.test.cpp index 68c3c4db..f4d7dce3 100644 --- a/tests/library_checker_aizu_tests/graphs/strongly_connected_components_lib_checker.test.cpp +++ b/tests/library_checker_aizu_tests/graphs/strongly_connected_components_lib_checker.test.cpp @@ -1,9 +1,7 @@ #define PROBLEM "https://judge.yosupo.jp/problem/scc" #include "../template.hpp" - #include "../../../library/graphs/strongly_connected_components/add_edges_strongly_connected.hpp" #include "../scc_asserts.hpp" - int main() { cin.tie(0)->sync_with_stdio(0); int n, m; @@ -18,7 +16,8 @@ int main() { auto [num_sccs, scc_id] = sccs(adj); cout << num_sccs << '\n'; vector> each_scc(num_sccs); - for (int i = 0; i < n; i++) each_scc[scc_id[i]].push_back(i); + for (int i = 0; i < n; i++) + each_scc[scc_id[i]].push_back(i); for (int i = num_sccs - 1; i >= 0; i--) { cout << sz(each_scc[i]) << " "; for (auto node : each_scc[i]) cout << node << " "; diff --git a/tests/library_checker_aizu_tests/math/xor_basis.test.cpp b/tests/library_checker_aizu_tests/math/xor_basis.test.cpp index a5d1d4b9..c42d84a9 100644 --- a/tests/library_checker_aizu_tests/math/xor_basis.test.cpp +++ b/tests/library_checker_aizu_tests/math/xor_basis.test.cpp @@ -60,7 +60,7 @@ int main() { } for (int i1 = 0; i1 < sz(unordered.b); i1++) { for (int i2 = i1 + 1; i2 < sz(unordered.b); - i2++) { + i2++) { assert(__lg(unordered.b[i1]) != __lg(unordered.b[i2])); assert(((1LL << __lg(unordered.b[i1])) & diff --git a/tests/library_checker_aizu_tests/strings/prefix_function.test.cpp b/tests/library_checker_aizu_tests/strings/prefix_function.test.cpp index 34bbc4d2..02b05e88 100644 --- a/tests/library_checker_aizu_tests/strings/prefix_function.test.cpp +++ b/tests/library_checker_aizu_tests/strings/prefix_function.test.cpp @@ -17,8 +17,8 @@ int main() { for (int i = 1; i < n;) { int j, v; for (j = 1; - j < z[i] && (v = min(z[j], z[i] - j)) >= z[i + j]; - j++) + j < z[i] && (v = min(z[j], z[i] - j)) >= z[i + j]; + j++) z[i + j] = v; i += j; } From 342908621c3598cbf1d1e5e6611a69571c8a04fa Mon Sep 17 00:00:00 2001 From: Luke Videckis Date: Fri, 24 Jan 2025 11:14:34 -0700 Subject: [PATCH 02/36] switch to clang format version 19 to match arch local version --- .github/workflows/programming_team_code_ci.yml | 4 ++-- tests/scripts/check_format_lint.sh | 2 +- tests/scripts/do_format.sh | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/programming_team_code_ci.yml b/.github/workflows/programming_team_code_ci.yml index 756d14b4..31ca5bcd 100644 --- a/.github/workflows/programming_team_code_ci.yml +++ b/.github/workflows/programming_team_code_ci.yml @@ -39,7 +39,7 @@ jobs: sudo apt install -y wget software-properties-common wget -O - https://apt.llvm.org/llvm.sh | sudo bash - name: Install dependencies - run: sudo apt update && sudo apt install -y clang-format-18 cppcheck + run: sudo apt update && sudo apt install -y clang-format-19 cppcheck - name: checks format then lints run: make --directory=tests/ check_format_lint @@ -126,7 +126,7 @@ jobs: sudo apt install -y wget software-properties-common wget -O - https://apt.llvm.org/llvm.sh | sudo bash - name: Install dependencies - run: sudo apt update && sudo apt install -y clang-format-18 + run: sudo apt update && sudo apt install -y clang-format-19 - name: Combine includes and force push to main branch run: | git config --local user.name github-actions diff --git a/tests/scripts/check_format_lint.sh b/tests/scripts/check_format_lint.sh index d9e555b8..fb5a2f82 100755 --- a/tests/scripts/check_format_lint.sh +++ b/tests/scripts/check_format_lint.sh @@ -36,7 +36,7 @@ find ../library/ library_checker_aizu_tests/ -name "*[A-Z]*" -or -name "*-*" | grep --invert-match "README" && exit 1 -clang-format-18 --dry-run --Werror --style=file:.config/.clang-format library_checker_aizu_tests/**/*.hpp ../library/**/*.hpp ../library/**/*.cpp || exit 1 +clang-format-19 --dry-run --Werror --style=file:.config/.clang-format library_checker_aizu_tests/**/*.hpp ../library/**/*.hpp ../library/**/*.cpp || exit 1 git submodule init git submodule update diff --git a/tests/scripts/do_format.sh b/tests/scripts/do_format.sh index 1dbcafb8..7a41729a 100755 --- a/tests/scripts/do_format.sh +++ b/tests/scripts/do_format.sh @@ -2,4 +2,4 @@ # ** glob now searches any number of levels shopt -s globstar -clang-format-18 -i --style=file:.config/.clang-format ../**/*.hpp ../**/*.cpp +clang-format-19 -i --style=file:.config/.clang-format ../**/*.hpp ../**/*.cpp From 2ee0a0c210f3e9f25a262e6df4f8aba84fb24860 Mon Sep 17 00:00:00 2001 From: Luke Videckis Date: Fri, 24 Jan 2025 11:18:44 -0700 Subject: [PATCH 03/36] trying this --- .github/workflows/programming_team_code_ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/programming_team_code_ci.yml b/.github/workflows/programming_team_code_ci.yml index 31ca5bcd..96e56183 100644 --- a/.github/workflows/programming_team_code_ci.yml +++ b/.github/workflows/programming_team_code_ci.yml @@ -39,7 +39,7 @@ jobs: sudo apt install -y wget software-properties-common wget -O - https://apt.llvm.org/llvm.sh | sudo bash - name: Install dependencies - run: sudo apt update && sudo apt install -y clang-format-19 cppcheck + run: sudo apt update && sudo apt install clang-format-19 cppcheck - name: checks format then lints run: make --directory=tests/ check_format_lint From ed0bce73044f13808c8f7aa2982c01d29db4a855 Mon Sep 17 00:00:00 2001 From: Luke Videckis Date: Fri, 24 Jan 2025 11:24:07 -0700 Subject: [PATCH 04/36] trying this now --- .github/workflows/programming_team_code_ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/programming_team_code_ci.yml b/.github/workflows/programming_team_code_ci.yml index 96e56183..fc17f0e8 100644 --- a/.github/workflows/programming_team_code_ci.yml +++ b/.github/workflows/programming_team_code_ci.yml @@ -39,7 +39,7 @@ jobs: sudo apt install -y wget software-properties-common wget -O - https://apt.llvm.org/llvm.sh | sudo bash - name: Install dependencies - run: sudo apt update && sudo apt install clang-format-19 cppcheck + run: sudo apt update && sudo apt install llvm-toolchain-19 cppcheck - name: checks format then lints run: make --directory=tests/ check_format_lint From 970c006d95cebce6a084f49b50ba98457e3c4c37 Mon Sep 17 00:00:00 2001 From: Luke Videckis Date: Fri, 24 Jan 2025 11:27:06 -0700 Subject: [PATCH 05/36] Revert "switch to clang format version 19 to match arch local version" This reverts commit 342908621c3598cbf1d1e5e6611a69571c8a04fa. --- .github/workflows/programming_team_code_ci.yml | 4 ++-- tests/scripts/check_format_lint.sh | 2 +- tests/scripts/do_format.sh | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/programming_team_code_ci.yml b/.github/workflows/programming_team_code_ci.yml index fc17f0e8..756d14b4 100644 --- a/.github/workflows/programming_team_code_ci.yml +++ b/.github/workflows/programming_team_code_ci.yml @@ -39,7 +39,7 @@ jobs: sudo apt install -y wget software-properties-common wget -O - https://apt.llvm.org/llvm.sh | sudo bash - name: Install dependencies - run: sudo apt update && sudo apt install llvm-toolchain-19 cppcheck + run: sudo apt update && sudo apt install -y clang-format-18 cppcheck - name: checks format then lints run: make --directory=tests/ check_format_lint @@ -126,7 +126,7 @@ jobs: sudo apt install -y wget software-properties-common wget -O - https://apt.llvm.org/llvm.sh | sudo bash - name: Install dependencies - run: sudo apt update && sudo apt install -y clang-format-19 + run: sudo apt update && sudo apt install -y clang-format-18 - name: Combine includes and force push to main branch run: | git config --local user.name github-actions diff --git a/tests/scripts/check_format_lint.sh b/tests/scripts/check_format_lint.sh index fb5a2f82..d9e555b8 100755 --- a/tests/scripts/check_format_lint.sh +++ b/tests/scripts/check_format_lint.sh @@ -36,7 +36,7 @@ find ../library/ library_checker_aizu_tests/ -name "*[A-Z]*" -or -name "*-*" | grep --invert-match "README" && exit 1 -clang-format-19 --dry-run --Werror --style=file:.config/.clang-format library_checker_aizu_tests/**/*.hpp ../library/**/*.hpp ../library/**/*.cpp || exit 1 +clang-format-18 --dry-run --Werror --style=file:.config/.clang-format library_checker_aizu_tests/**/*.hpp ../library/**/*.hpp ../library/**/*.cpp || exit 1 git submodule init git submodule update diff --git a/tests/scripts/do_format.sh b/tests/scripts/do_format.sh index 7a41729a..1dbcafb8 100755 --- a/tests/scripts/do_format.sh +++ b/tests/scripts/do_format.sh @@ -2,4 +2,4 @@ # ** glob now searches any number of levels shopt -s globstar -clang-format-19 -i --style=file:.config/.clang-format ../**/*.hpp ../**/*.cpp +clang-format-18 -i --style=file:.config/.clang-format ../**/*.hpp ../**/*.cpp From f725f1f5e60eff5cc6b0d41d6d751636f2bc2a05 Mon Sep 17 00:00:00 2001 From: Luke Videckis Date: Fri, 24 Jan 2025 11:38:16 -0700 Subject: [PATCH 06/36] revert formatting of some files --- library/contest/dynamic_bitset.hpp | 2 +- .../uncommon/priority_queue_of_updates.hpp | 2 +- library/loops/chooses.hpp | 2 +- library/loops/submasks.hpp | 2 +- library/loops/supermasks.hpp | 2 +- library/math/partitions.hpp | 2 +- library/math/prime_sieve/mobius.hpp | 2 +- library/monotonic_stack/cartesian_binary_tree.hpp | 3 ++- library/monotonic_stack/monotonic_stack.hpp | 5 +++-- library/strings/suffix_array/find/find_string_bs_fast.hpp | 2 +- library/strings/suffix_array/suffix_array.hpp | 2 +- library/strings/suffix_array/suffix_array_short.hpp | 2 +- .../data_structures/line_tree_aizu.test.cpp | 4 ++-- .../data_structures/line_tree_lib_checker.test.cpp | 2 +- .../data_structures/persistent_queue_tree.test.cpp | 2 +- .../graphs/offline_incremental_scc.test.cpp | 8 ++++---- .../graphs/strongly_connected_components_aizu.test.cpp | 2 ++ .../strongly_connected_components_lib_checker.test.cpp | 5 +++-- tests/library_checker_aizu_tests/math/xor_basis.test.cpp | 2 +- .../strings/prefix_function.test.cpp | 4 ++-- 20 files changed, 31 insertions(+), 26 deletions(-) diff --git a/library/contest/dynamic_bitset.hpp b/library/contest/dynamic_bitset.hpp index c8f1d421..e68446d7 100644 --- a/library/contest/dynamic_bitset.hpp +++ b/library/contest/dynamic_bitset.hpp @@ -18,7 +18,7 @@ void f() { bs.push_back(0); cerr << bs << endl; for (int i = bs.find_first(); i != ssize(bs); - i = bs.find_next(i)) + i = bs.find_next(i)) cerr << i << endl; bs -= bs; // bs &= ~bs; } diff --git a/library/data_structures/uncommon/priority_queue_of_updates.hpp b/library/data_structures/uncommon/priority_queue_of_updates.hpp index 7796a03d..146aac0e 100644 --- a/library/data_structures/uncommon/priority_queue_of_updates.hpp +++ b/library/data_structures/uncommon/priority_queue_of_updates.hpp @@ -34,7 +34,7 @@ template struct pq_updates { vector extra; int idx = sz(upd_st) - 1, lowest_pri = INT_MAX; for (auto it = rbegin(mp); - 2 * sz(extra) < sz(upd_st) - idx; it++) { + 2 * sz(extra) < sz(upd_st) - idx; it++) { auto [pri, idx_sk] = *it; extra.push_back(upd_st[idx_sk]); idx = min(idx, idx_sk), lowest_pri = pri; diff --git a/library/loops/chooses.hpp b/library/loops/chooses.hpp index 3b98c752..5f932355 100644 --- a/library/loops/chooses.hpp +++ b/library/loops/chooses.hpp @@ -5,4 +5,4 @@ //! @time O(n choose k) //! @space O(1) for (int mask = (1 << k) - 1; mask < (1 << n); - mask = next_subset(mask)) + mask = next_subset(mask)) diff --git a/library/loops/submasks.hpp b/library/loops/submasks.hpp index 200777c1..6216f537 100644 --- a/library/loops/submasks.hpp +++ b/library/loops/submasks.hpp @@ -5,4 +5,4 @@ //! of every mask of size n //! @space O(1) for (int submask = mask; submask; - submask = (submask - 1) & mask) + submask = (submask - 1) & mask) diff --git a/library/loops/supermasks.hpp b/library/loops/supermasks.hpp index 05864afc..9b468e3a 100644 --- a/library/loops/supermasks.hpp +++ b/library/loops/supermasks.hpp @@ -6,4 +6,4 @@ //! of every mask of size n //! @space O(1) for (int supermask = mask; supermask < (1 << n); - supermask = (supermask + 1) | mask) + supermask = (supermask + 1) | mask) diff --git a/library/math/partitions.hpp b/library/math/partitions.hpp index 822ed670..fd6d350c 100644 --- a/library/math/partitions.hpp +++ b/library/math/partitions.hpp @@ -12,7 +12,7 @@ vector partitions(int n) { rep(i, 1, n) { ll sum = 0; for (int j = 1, pent = 1, sign = 1; pent <= i; - j++, pent += 3 * j - 2, sign = -sign) { + j++, pent += 3 * j - 2, sign = -sign) { if (pent + j <= i) sum += dp[i - pent - j] * sign + mod; sum += dp[i - pent] * sign + mod; diff --git a/library/math/prime_sieve/mobius.hpp b/library/math/prime_sieve/mobius.hpp index 433e77bd..00b8e182 100644 --- a/library/math/prime_sieve/mobius.hpp +++ b/library/math/prime_sieve/mobius.hpp @@ -4,4 +4,4 @@ vi mobius(100'005); mobius[1] = 1; rep(i, 1, sz(mobius)) for (int j = i + i; j < sz(mobius); - j += i) mobius[j] -= mobius[i]; + j += i) mobius[j] -= mobius[i]; diff --git a/library/monotonic_stack/cartesian_binary_tree.hpp b/library/monotonic_stack/cartesian_binary_tree.hpp index 67355f4e..b9bad14a 100644 --- a/library/monotonic_stack/cartesian_binary_tree.hpp +++ b/library/monotonic_stack/cartesian_binary_tree.hpp @@ -24,6 +24,7 @@ vi cart_binary_tree(const vi& l) { vi p(l); rep(i, 0, sz(p)) for (int j = i - 1; j != l[i]; - j = l[j]) if (l[j] == l[i]) p[j] = i; + j = l[j]) if (l[j] == l[i]) p[j] = + i; return p; } diff --git a/library/monotonic_stack/monotonic_stack.hpp b/library/monotonic_stack/monotonic_stack.hpp index f17529d4..42615a62 100644 --- a/library/monotonic_stack/monotonic_stack.hpp +++ b/library/monotonic_stack/monotonic_stack.hpp @@ -9,7 +9,8 @@ //! @space O(n) 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]]; + rep(i, 0, sz(a)) for ( + l[i] = i - 1; l[i] >= 0 && !cmp(a[l[i]], a[i]);) l[i] = + l[l[i]]; return l; } diff --git a/library/strings/suffix_array/find/find_string_bs_fast.hpp b/library/strings/suffix_array/find/find_string_bs_fast.hpp index 1f43f0f3..d2998fbf 100644 --- a/library/strings/suffix_array/find/find_string_bs_fast.hpp +++ b/library/strings/suffix_array/find/find_string_bs_fast.hpp @@ -8,7 +8,7 @@ match find_str_fast(const T& t) { int s_l = n, s_len = 0; auto cmp = [&](int i, int) -> bool { if (int lcp_len = s_l == n ? 0 : len_lcp(s_l, i); - lcp_len != s_len) + lcp_len != s_len) return (lcp_len < s_len) ^ (cmp_sufs(s_l, i) < 0); auto [it_s, it_t] = mismatch(i + s_len + all(s), s_len + all(t)); diff --git a/library/strings/suffix_array/suffix_array.hpp b/library/strings/suffix_array/suffix_array.hpp index 8ce1278f..34b80a80 100644 --- a/library/strings/suffix_array/suffix_array.hpp +++ b/library/strings/suffix_array/suffix_array.hpp @@ -62,7 +62,7 @@ auto get_sa(const auto& s, int max_num) { if (sz > 0) sz--; if (sa_inv[i] == 0) continue; for (int j = sa[sa_inv[i] - 1]; - max(i, j) + sz < n && s[i + sz] == s[j + sz];) + max(i, j) + sz < n && s[i + sz] == s[j + sz];) sz++; lcp[sa_inv[i] - 1] = sz; } diff --git a/library/strings/suffix_array/suffix_array_short.hpp b/library/strings/suffix_array/suffix_array_short.hpp index cb0a7f34..94ed3382 100644 --- a/library/strings/suffix_array/suffix_array_short.hpp +++ b/library/strings/suffix_array/suffix_array_short.hpp @@ -29,7 +29,7 @@ auto sa_short(const auto& s) { if (sz > 0) sz--; if (sa_inv[i] == 0) continue; for (int j = sa[sa_inv[i] - 1]; - max(i, j) + sz < n && s[i + sz] == s[j + sz];) + max(i, j) + sz < n && s[i + sz] == s[j + sz];) sz++; lcp[sa_inv[i] - 1] = sz; } diff --git a/tests/library_checker_aizu_tests/data_structures/line_tree_aizu.test.cpp b/tests/library_checker_aizu_tests/data_structures/line_tree_aizu.test.cpp index d9400ddf..e94131bf 100644 --- a/tests/library_checker_aizu_tests/data_structures/line_tree_aizu.test.cpp +++ b/tests/library_checker_aizu_tests/data_structures/line_tree_aizu.test.cpp @@ -29,8 +29,8 @@ int main() { vector edge_weights; vector to_time(n); for (int v = lt.find(0), timer = 1; - lt.edge[v] != pii{-1, -1}; - v = lt.edge[v].first, timer++) { + lt.edge[v] != pii{-1, -1}; + v = lt.edge[v].first, timer++) { edge_weights.push_back(w_eds[lt.edge[v].second][0]); to_time[lt.edge[v].first] = timer; mst_sum += w_eds[lt.edge[v].second][0]; diff --git a/tests/library_checker_aizu_tests/data_structures/line_tree_lib_checker.test.cpp b/tests/library_checker_aizu_tests/data_structures/line_tree_lib_checker.test.cpp index 2b6acb51..7a983423 100644 --- a/tests/library_checker_aizu_tests/data_structures/line_tree_lib_checker.test.cpp +++ b/tests/library_checker_aizu_tests/data_structures/line_tree_lib_checker.test.cpp @@ -23,7 +23,7 @@ int main() { int64_t cost = 0; vector ids; for (int v = lt.find(0); lt.edge[v].first != -1; - v = lt.edge[v].first) { + v = lt.edge[v].first) { ids.push_back(w_eds[lt.edge[v].second][0]); cost += weights[w_eds[lt.edge[v].second][0]]; } diff --git a/tests/library_checker_aizu_tests/data_structures/persistent_queue_tree.test.cpp b/tests/library_checker_aizu_tests/data_structures/persistent_queue_tree.test.cpp index 321e58e5..0695c400 100644 --- a/tests/library_checker_aizu_tests/data_structures/persistent_queue_tree.test.cpp +++ b/tests/library_checker_aizu_tests/data_structures/persistent_queue_tree.test.cpp @@ -11,7 +11,7 @@ int main() { // bounds[version] = [left index, right index) represents // subarray range of queue for (int curr_version = 1; curr_version <= q; - curr_version++) { + curr_version++) { int type; cin >> type; if (type == 0) { diff --git a/tests/library_checker_aizu_tests/graphs/offline_incremental_scc.test.cpp b/tests/library_checker_aizu_tests/graphs/offline_incremental_scc.test.cpp index 05bd7fcd..d7fc10ce 100644 --- a/tests/library_checker_aizu_tests/graphs/offline_incremental_scc.test.cpp +++ b/tests/library_checker_aizu_tests/graphs/offline_incremental_scc.test.cpp @@ -1,9 +1,10 @@ -#define PROBLEM \ - "https://judge.yosupo.jp/problem/incremental_scc" +#define PROBLEM "https://judge.yosupo.jp/problem/incremental_scc" #include "../template.hpp" + #include "../../../library/graphs/strongly_connected_components/offline_incremental_scc.hpp" #include "../../../kactl/content/data-structures/UnionFind.h" #include "../../../library/math/mod_int.hpp" + int main() { cin.tie(0)->sync_with_stdio(0); int n, m; @@ -18,8 +19,7 @@ int main() { assert((eds[t][0] == eds[t][1]) == (joins[t] == -1)); vector order(m); iota(all(order), 0); - ranges::sort(all(order), {}, - [&](int i) { return joins[i]; }); + ranges::sort(all(order), {}, [&](int i) { return joins[i]; }); UF uf(n); mint sum = 0; for (int t = 0, it = 0; t < m; t++) { diff --git a/tests/library_checker_aizu_tests/graphs/strongly_connected_components_aizu.test.cpp b/tests/library_checker_aizu_tests/graphs/strongly_connected_components_aizu.test.cpp index 9da0c857..a919230a 100644 --- a/tests/library_checker_aizu_tests/graphs/strongly_connected_components_aizu.test.cpp +++ b/tests/library_checker_aizu_tests/graphs/strongly_connected_components_aizu.test.cpp @@ -1,8 +1,10 @@ #define PROBLEM \ "https://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=GRL_3_C" #include "../template.hpp" + #include "../../../library/graphs/strongly_connected_components/add_edges_strongly_connected.hpp" #include "../scc_asserts.hpp" + int main() { cin.tie(0)->sync_with_stdio(0); int n, m; diff --git a/tests/library_checker_aizu_tests/graphs/strongly_connected_components_lib_checker.test.cpp b/tests/library_checker_aizu_tests/graphs/strongly_connected_components_lib_checker.test.cpp index f4d7dce3..68c3c4db 100644 --- a/tests/library_checker_aizu_tests/graphs/strongly_connected_components_lib_checker.test.cpp +++ b/tests/library_checker_aizu_tests/graphs/strongly_connected_components_lib_checker.test.cpp @@ -1,7 +1,9 @@ #define PROBLEM "https://judge.yosupo.jp/problem/scc" #include "../template.hpp" + #include "../../../library/graphs/strongly_connected_components/add_edges_strongly_connected.hpp" #include "../scc_asserts.hpp" + int main() { cin.tie(0)->sync_with_stdio(0); int n, m; @@ -16,8 +18,7 @@ int main() { auto [num_sccs, scc_id] = sccs(adj); cout << num_sccs << '\n'; vector> each_scc(num_sccs); - for (int i = 0; i < n; i++) - each_scc[scc_id[i]].push_back(i); + for (int i = 0; i < n; i++) each_scc[scc_id[i]].push_back(i); for (int i = num_sccs - 1; i >= 0; i--) { cout << sz(each_scc[i]) << " "; for (auto node : each_scc[i]) cout << node << " "; diff --git a/tests/library_checker_aizu_tests/math/xor_basis.test.cpp b/tests/library_checker_aizu_tests/math/xor_basis.test.cpp index c42d84a9..a5d1d4b9 100644 --- a/tests/library_checker_aizu_tests/math/xor_basis.test.cpp +++ b/tests/library_checker_aizu_tests/math/xor_basis.test.cpp @@ -60,7 +60,7 @@ int main() { } for (int i1 = 0; i1 < sz(unordered.b); i1++) { for (int i2 = i1 + 1; i2 < sz(unordered.b); - i2++) { + i2++) { assert(__lg(unordered.b[i1]) != __lg(unordered.b[i2])); assert(((1LL << __lg(unordered.b[i1])) & diff --git a/tests/library_checker_aizu_tests/strings/prefix_function.test.cpp b/tests/library_checker_aizu_tests/strings/prefix_function.test.cpp index 02b05e88..34bbc4d2 100644 --- a/tests/library_checker_aizu_tests/strings/prefix_function.test.cpp +++ b/tests/library_checker_aizu_tests/strings/prefix_function.test.cpp @@ -17,8 +17,8 @@ int main() { for (int i = 1; i < n;) { int j, v; for (j = 1; - j < z[i] && (v = min(z[j], z[i] - j)) >= z[i + j]; - j++) + j < z[i] && (v = min(z[j], z[i] - j)) >= z[i + j]; + j++) z[i + j] = v; i += j; } From a875b601e59cdcdc5f42774a77076d53fdf5deff Mon Sep 17 00:00:00 2001 From: Luke Videckis Date: Fri, 24 Jan 2025 11:47:58 -0700 Subject: [PATCH 07/36] fix some things --- tests/.config/.cppcheck_suppression_list | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/tests/.config/.cppcheck_suppression_list b/tests/.config/.cppcheck_suppression_list index b3abc40b..1ad6e908 100644 --- a/tests/.config/.cppcheck_suppression_list +++ b/tests/.config/.cppcheck_suppression_list @@ -25,6 +25,7 @@ useStlAlgorithm:../library/graphs/strongly_connected_components/add_edges_strong useStlAlgorithm:../library/math/matrix_related/row_reduce.hpp:28 useStlAlgorithm:../library/math/count_paths/count_paths_triangle.hpp:24 useStlAlgorithm:../library/math/matrix_related/xor_basis_unordered_intersection.hpp:10 +useStlAlgorithm:../library/math/matrix_related/xor_basis_unordered.hpp:16 shadowFunction:../kactl/content/graph/BinaryLifting.h:17 unknownMacro:../kactl/content/graph/BinaryLifting.h:18 constParameter:../kactl/content/graph/BinaryLifting.h:29 @@ -51,8 +52,24 @@ syntaxError:../library/loops/submasks.hpp:7 syntaxError:../library/loops/supermasks.hpp:8 syntaxError:../library/math/prime_sieve/mobius.hpp:6 syntaxError:../library/trees/lca_rmq/iterate_subtree.hpp:6 -constVariable:../kactl/content/graph/CompressTree.h:20 knownConditionTrueFalse:../library/strings/suffix_array/suffix_array.hpp:62 knownConditionTrueFalse:../library/strings/suffix_array/suffix_array_short.hpp:29 +knownConditionTrueFalse:../library/data_structures/dsu/kruskal_tree.hpp:15 constVariable:../kactl/content/numerical/NumberTheoreticTransform.h:30 +constVariable:../kactl/content/graph/CompressTree.h:20 functionStatic:../library/monotonic_stack/monotonic_stack.hpp:10 +constVariableReference:../kactl/content/graph/CompressTree.h:20 +constParameterReference:../library/data_structures/deque_op/queue_only.hpp:29 +constParameterReference:../library/data_structures/uncommon/priority_queue_of_updates.hpp:43 +constParameterReference:../kactl/stress-tests/utilities/genTree.h:8 +constParameterReference:../kactl/content/graph/BinaryLifting.h:29 +constParameterReference:../library/math/matrix_related/row_reduce.hpp:17 +constVariableReference:../library/flow/min_cost_max_flow.hpp:43 +constVariableReference:library_checker_aizu_tests/graphs/connected_components_of_complement_graph.test.cpp:21 +constVariableReference:library_checker_aizu_tests/handmade_tests/dsu_size.test.cpp:39 +constVariablePointer:../kactl/content/numerical/FastFourierTransform.h:39 +cstyleCast:../kactl/content/numerical/FastFourierTransform.h:39 +derefInvalidIterator:../library/data_structures/uncommon/linear_rmq.hpp:28 +derefInvalidIterator:library_checker_aizu_tests/handmade_tests/n_choose_k.test.cpp:13 +unreadVariable:library_checker_aizu_tests/handmade_tests/permutation_tree_small.test.cpp:12 +uninitvar:library_checker_aizu_tests/handmade_tests/seg_tree_find_small.test.cpp:41 From df7c4c9192a741cb4ba90061360dc3181a515af0 Mon Sep 17 00:00:00 2001 From: GitHub Date: Fri, 24 Jan 2025 19:47:59 +0000 Subject: [PATCH 08/36] [auto-verifier] verify commit a875b601e59cdcdc5f42774a77076d53fdf5deff --- .verify-helper/timestamps.remote.json | 73 ++++++++++++--------------- 1 file changed, 31 insertions(+), 42 deletions(-) diff --git a/.verify-helper/timestamps.remote.json b/.verify-helper/timestamps.remote.json index 4b8e6e87..707d2356 100644 --- a/.verify-helper/timestamps.remote.json +++ b/.verify-helper/timestamps.remote.json @@ -29,19 +29,19 @@ "tests/library_checker_aizu_tests/data_structures/lazy_segment_tree_constructor.test.cpp": "2024-12-14 19:50:29 -0600", "tests/library_checker_aizu_tests/data_structures/lazy_segment_tree_inc.test.cpp": "2024-12-05 10:41:42 -0600", "tests/library_checker_aizu_tests/data_structures/lazy_segment_tree_inc_constructor.test.cpp": "2024-12-05 10:41:42 -0600", -"tests/library_checker_aizu_tests/data_structures/line_tree_aizu.test.cpp": "2024-12-05 10:41:42 -0600", -"tests/library_checker_aizu_tests/data_structures/line_tree_lib_checker.test.cpp": "2024-11-17 14:04:03 -0600", +"tests/library_checker_aizu_tests/data_structures/line_tree_aizu.test.cpp": "2025-01-24 11:38:16 -0700", +"tests/library_checker_aizu_tests/data_structures/line_tree_lib_checker.test.cpp": "2025-01-24 11:38:16 -0700", "tests/library_checker_aizu_tests/data_structures/merge_sort_tree.test.cpp": "2024-11-17 14:04:03 -0600", "tests/library_checker_aizu_tests/data_structures/mode_query.test.cpp": "2024-12-05 10:41:42 -0600", "tests/library_checker_aizu_tests/data_structures/permutation_tree.test.cpp": "2024-12-14 15:47:13 -0600", -"tests/library_checker_aizu_tests/data_structures/persistent_queue_tree.test.cpp": "2024-12-05 10:41:42 -0600", +"tests/library_checker_aizu_tests/data_structures/persistent_queue_tree.test.cpp": "2025-01-24 11:38:16 -0700", "tests/library_checker_aizu_tests/data_structures/persistent_seg_tree.test.cpp": "2024-12-05 10:41:42 -0600", -"tests/library_checker_aizu_tests/data_structures/pq_ds_undo_sliding_window.test.cpp": "2024-12-05 10:41:42 -0600", -"tests/library_checker_aizu_tests/data_structures/pq_ds_undo_with_dsu.test.cpp": "2024-12-05 10:41:42 -0600", +"tests/library_checker_aizu_tests/data_structures/pq_ds_undo_sliding_window.test.cpp": "2025-01-24 11:38:16 -0700", +"tests/library_checker_aizu_tests/data_structures/pq_ds_undo_with_dsu.test.cpp": "2025-01-24 11:38:16 -0700", "tests/library_checker_aizu_tests/data_structures/range_parallel_dsu.test.cpp": "2024-12-15 14:34:10 -0600", "tests/library_checker_aizu_tests/data_structures/rmq_disjoint_sparse_table.test.cpp": "2024-12-15 14:34:10 -0600", "tests/library_checker_aizu_tests/data_structures/rmq_linear.test.cpp": "2024-12-15 14:34:10 -0600", -"tests/library_checker_aizu_tests/data_structures/rmq_sparse_table.test.cpp": "2024-12-15 14:34:10 -0600", +"tests/library_checker_aizu_tests/data_structures/rmq_sparse_table.test.cpp": "2025-01-24 11:38:16 -0700", "tests/library_checker_aizu_tests/data_structures/rmq_sparse_table_inc.test.cpp": "2024-12-15 14:34:10 -0600", "tests/library_checker_aizu_tests/data_structures/simple_tree.test.cpp": "2024-12-14 15:47:13 -0600", "tests/library_checker_aizu_tests/data_structures/simple_tree_inc.test.cpp": "2024-12-21 00:23:10 -0500", @@ -50,40 +50,39 @@ "tests/library_checker_aizu_tests/flow/dinic_aizu.test.cpp": "2024-11-17 14:04:03 -0600", "tests/library_checker_aizu_tests/flow/hungarian.test.cpp": "2024-11-17 14:04:03 -0600", "tests/library_checker_aizu_tests/flow/min_cost_max_flow.test.cpp": "2024-12-05 10:41:42 -0600", -"tests/library_checker_aizu_tests/graphs/biconnected_components.test.cpp": "2024-12-15 09:01:54 -0600", +"tests/library_checker_aizu_tests/graphs/biconnected_components.test.cpp": "2025-01-24 10:59:16 -0700", "tests/library_checker_aizu_tests/graphs/connected_components_of_complement_graph.test.cpp": "2024-12-14 19:50:29 -0600", "tests/library_checker_aizu_tests/graphs/dijkstra_aizu.test.cpp": "2024-12-14 19:50:29 -0600", "tests/library_checker_aizu_tests/graphs/dijkstra_lib_checker.test.cpp": "2024-12-14 19:50:29 -0600", -"tests/library_checker_aizu_tests/graphs/directed_cycle.test.cpp": "2025-01-15 00:11:15 -0700", +"tests/library_checker_aizu_tests/graphs/directed_cycle.test.cpp": "2025-01-24 10:59:16 -0700", "tests/library_checker_aizu_tests/graphs/enumerate_triangles.test.cpp": "2024-12-14 19:50:29 -0600", -"tests/library_checker_aizu_tests/graphs/hopcroft_karp_aizu.test.cpp": "2024-12-14 19:50:29 -0600", -"tests/library_checker_aizu_tests/graphs/hopcroft_karp_lib_checker.test.cpp": "2024-12-14 19:50:29 -0600", +"tests/library_checker_aizu_tests/graphs/hopcroft_karp_aizu.test.cpp": "2025-01-24 10:59:16 -0700", +"tests/library_checker_aizu_tests/graphs/hopcroft_karp_lib_checker.test.cpp": "2025-01-24 10:59:16 -0700", "tests/library_checker_aizu_tests/graphs/mst.test.cpp": "2024-11-17 14:04:03 -0600", -"tests/library_checker_aizu_tests/graphs/offline_incremental_scc.test.cpp": "2025-01-15 00:11:15 -0700", -"tests/library_checker_aizu_tests/graphs/strongly_connected_components_aizu.test.cpp": "2025-01-15 00:11:15 -0700", -"tests/library_checker_aizu_tests/graphs/strongly_connected_components_lib_checker.test.cpp": "2025-01-15 00:11:15 -0700", -"tests/library_checker_aizu_tests/graphs/two_edge_components.test.cpp": "2024-12-15 09:01:54 -0600", +"tests/library_checker_aizu_tests/graphs/strongly_connected_components_aizu.test.cpp": "2025-01-24 11:38:16 -0700", +"tests/library_checker_aizu_tests/graphs/strongly_connected_components_lib_checker.test.cpp": "2025-01-24 11:38:16 -0700", +"tests/library_checker_aizu_tests/graphs/two_edge_components.test.cpp": "2025-01-24 10:59:16 -0700", "tests/library_checker_aizu_tests/handmade_tests/count_paths_forest.test.cpp": "2024-12-15 14:34:10 -0600", "tests/library_checker_aizu_tests/handmade_tests/dsu_size.test.cpp": "2024-12-14 19:50:29 -0600", -"tests/library_checker_aizu_tests/handmade_tests/dynamic_bitset.test.cpp": "2024-11-22 10:47:44 -0600", +"tests/library_checker_aizu_tests/handmade_tests/dynamic_bitset.test.cpp": "2025-01-24 11:38:16 -0700", "tests/library_checker_aizu_tests/handmade_tests/edge_cd_small_trees.test.cpp": "2024-12-15 17:01:11 -0600", "tests/library_checker_aizu_tests/handmade_tests/fib_matrix_expo.test.cpp": "2024-12-14 19:50:29 -0600", "tests/library_checker_aizu_tests/handmade_tests/functional_graph.test.cpp": "2024-12-15 17:01:11 -0600", -"tests/library_checker_aizu_tests/handmade_tests/lca_ladder_forest.test.cpp": "2024-12-15 17:40:52 -0600", +"tests/library_checker_aizu_tests/handmade_tests/lca_ladder_forest.test.cpp": "2025-01-24 11:38:16 -0700", "tests/library_checker_aizu_tests/handmade_tests/manacher.test.cpp": "2024-12-14 19:50:29 -0600", "tests/library_checker_aizu_tests/handmade_tests/merge_st_and_wavelet.test.cpp": "2024-12-14 19:50:29 -0600", -"tests/library_checker_aizu_tests/handmade_tests/mobius.test.cpp": "2024-12-15 14:34:10 -0600", +"tests/library_checker_aizu_tests/handmade_tests/mobius.test.cpp": "2025-01-24 11:38:16 -0700", "tests/library_checker_aizu_tests/handmade_tests/mod_int.test.cpp": "2024-12-14 19:50:29 -0600", "tests/library_checker_aizu_tests/handmade_tests/n_choose_k.test.cpp": "2025-01-15 00:22:31 -0700", "tests/library_checker_aizu_tests/handmade_tests/permutation_tree_small.test.cpp": "2024-12-14 15:47:13 -0600", "tests/library_checker_aizu_tests/handmade_tests/rmq_small_n.test.cpp": "2024-12-14 19:50:29 -0600", -"tests/library_checker_aizu_tests/handmade_tests/sa_find_subarray.test.cpp": "2024-12-14 19:50:29 -0600", +"tests/library_checker_aizu_tests/handmade_tests/sa_find_subarray.test.cpp": "2025-01-24 11:38:16 -0700", "tests/library_checker_aizu_tests/handmade_tests/seg_tree_find.test.cpp": "2024-12-14 19:50:29 -0600", "tests/library_checker_aizu_tests/handmade_tests/seg_tree_find_small.test.cpp": "2024-12-14 19:50:29 -0600", -"tests/library_checker_aizu_tests/loops/chooses.test.cpp": "2024-11-17 14:04:03 -0600", +"tests/library_checker_aizu_tests/loops/chooses.test.cpp": "2025-01-24 11:38:16 -0700", "tests/library_checker_aizu_tests/loops/quotients.test.cpp": "2024-11-17 14:04:03 -0600", -"tests/library_checker_aizu_tests/loops/submasks.test.cpp": "2024-11-17 14:04:03 -0600", -"tests/library_checker_aizu_tests/loops/supermasks.test.cpp": "2024-11-17 14:04:03 -0600", +"tests/library_checker_aizu_tests/loops/submasks.test.cpp": "2025-01-24 11:38:16 -0700", +"tests/library_checker_aizu_tests/loops/supermasks.test.cpp": "2025-01-24 11:38:16 -0700", "tests/library_checker_aizu_tests/math/binary_exponentiation_mod.test.cpp": "2024-11-17 14:04:03 -0600", "tests/library_checker_aizu_tests/math/binary_matrix_mult.test.cpp": "2024-11-17 14:04:03 -0600", "tests/library_checker_aizu_tests/math/count_paths.test.cpp": "2025-01-15 00:22:31 -0700", @@ -96,32 +95,25 @@ "tests/library_checker_aizu_tests/math/mod_int_tetration.test.cpp": "2024-11-17 14:04:03 -0600", "tests/library_checker_aizu_tests/math/n_choose_k.test.cpp": "2025-01-15 00:22:31 -0700", "tests/library_checker_aizu_tests/math/num_subsequences.test.cpp": "2024-11-17 14:04:03 -0600", -"tests/library_checker_aizu_tests/math/partitions.test.cpp": "2024-11-17 14:04:03 -0600", "tests/library_checker_aizu_tests/math/prime_sieve.test.cpp": "2024-11-22 11:54:52 -0600", "tests/library_checker_aizu_tests/math/solve_linear_mod.test.cpp": "2024-12-14 15:47:13 -0600", "tests/library_checker_aizu_tests/math/tetration.test.cpp": "2024-11-17 14:04:03 -0600", "tests/library_checker_aizu_tests/math/totient.test.cpp": "2024-11-17 14:04:03 -0600", -"tests/library_checker_aizu_tests/math/xor_basis.test.cpp": "2024-12-15 14:34:10 -0600", -"tests/library_checker_aizu_tests/math/xor_basis_intersection.test.cpp": "2024-12-15 14:34:10 -0600", -"tests/library_checker_aizu_tests/monotonic_stack_related/cartesian_binary_tree.test.cpp": "2024-12-14 19:50:29 -0600", -"tests/library_checker_aizu_tests/monotonic_stack_related/cartesian_k_ary_tree.test.cpp": "2024-12-15 14:34:10 -0600", -"tests/library_checker_aizu_tests/monotonic_stack_related/count_rectangles.test.cpp": "2024-12-15 14:34:10 -0600", -"tests/library_checker_aizu_tests/monotonic_stack_related/max_rect_histogram.test.cpp": "2024-12-15 14:34:10 -0600", +"tests/library_checker_aizu_tests/math/xor_basis.test.cpp": "2025-01-24 11:38:16 -0700", +"tests/library_checker_aizu_tests/math/xor_basis_intersection.test.cpp": "2025-01-24 10:59:16 -0700", +"tests/library_checker_aizu_tests/monotonic_stack_related/cartesian_binary_tree.test.cpp": "2025-01-24 11:38:16 -0700", +"tests/library_checker_aizu_tests/monotonic_stack_related/cartesian_k_ary_tree.test.cpp": "2025-01-24 11:38:16 -0700", +"tests/library_checker_aizu_tests/monotonic_stack_related/max_rect_histogram.test.cpp": "2025-01-24 11:38:16 -0700", "tests/library_checker_aizu_tests/strings/kmp.test.cpp": "2024-12-14 19:50:29 -0600", -"tests/library_checker_aizu_tests/strings/lcp_array.test.cpp": "2024-12-14 19:50:29 -0600", -"tests/library_checker_aizu_tests/strings/lcp_query_palindrome.test.cpp": "2024-12-14 19:50:29 -0600", -"tests/library_checker_aizu_tests/strings/lcp_query_zfunc.test.cpp": "2024-12-14 19:50:29 -0600", "tests/library_checker_aizu_tests/strings/lcs_dp.test.cpp": "2024-12-05 10:41:42 -0600", "tests/library_checker_aizu_tests/strings/lcs_queries.test.cpp": "2024-12-14 19:50:29 -0600", "tests/library_checker_aizu_tests/strings/lcs_queries_merge_sort_tree.test.cpp": "2024-12-05 10:41:42 -0600", "tests/library_checker_aizu_tests/strings/manacher.test.cpp": "2024-12-14 19:50:29 -0600", -"tests/library_checker_aizu_tests/strings/multi_matching_bs.test.cpp": "2024-12-14 19:50:29 -0600", -"tests/library_checker_aizu_tests/strings/prefix_function.test.cpp": "2024-12-14 19:50:29 -0600", -"tests/library_checker_aizu_tests/strings/sa_cmp.test.cpp": "2024-12-14 19:50:29 -0600", -"tests/library_checker_aizu_tests/strings/sa_sort_pairs.test.cpp": "2024-12-14 19:50:29 -0600", -"tests/library_checker_aizu_tests/strings/single_matching_bs.test.cpp": "2024-12-14 19:50:29 -0600", -"tests/library_checker_aizu_tests/strings/suffix_array.test.cpp": "2024-12-15 14:34:10 -0600", -"tests/library_checker_aizu_tests/strings/suffix_array_short.test.cpp": "2024-12-14 19:50:29 -0600", +"tests/library_checker_aizu_tests/strings/multi_matching_bs.test.cpp": "2025-01-24 11:38:16 -0700", +"tests/library_checker_aizu_tests/strings/prefix_function.test.cpp": "2025-01-24 11:38:16 -0700", +"tests/library_checker_aizu_tests/strings/sa_cmp.test.cpp": "2025-01-24 11:38:16 -0700", +"tests/library_checker_aizu_tests/strings/sa_sort_pairs.test.cpp": "2025-01-24 11:38:16 -0700", +"tests/library_checker_aizu_tests/strings/single_matching_bs.test.cpp": "2025-01-24 11:38:16 -0700", "tests/library_checker_aizu_tests/strings/trie.test.cpp": "2024-12-05 10:41:42 -0600", "tests/library_checker_aizu_tests/strings/wildcard_pattern_matching.test.cpp": "2024-12-14 19:50:29 -0600", "tests/library_checker_aizu_tests/trees/count_paths_per_length.test.cpp": "2024-12-15 14:34:10 -0600", @@ -130,9 +122,6 @@ "tests/library_checker_aizu_tests/trees/edge_cd_count_paths_per_length.test.cpp": "2024-12-15 17:01:11 -0600", "tests/library_checker_aizu_tests/trees/edge_cd_reroot_dp.test.cpp": "2024-12-15 17:01:11 -0600", "tests/library_checker_aizu_tests/trees/kth_path_ladder.test.cpp": "2024-12-15 14:34:10 -0600", -"tests/library_checker_aizu_tests/trees/kth_path_linear.test.cpp": "2024-12-15 17:40:52 -0600", -"tests/library_checker_aizu_tests/trees/kth_path_tree_lift.test.cpp": "2024-12-15 14:34:10 -0600", -"tests/library_checker_aizu_tests/trees/lca_all_methods_aizu.test.cpp": "2024-12-15 17:40:52 -0600", -"tests/library_checker_aizu_tests/trees/lca_all_methods_lib_checker.test.cpp": "2024-12-15 17:40:52 -0600", +"tests/library_checker_aizu_tests/trees/lca_all_methods_aizu.test.cpp": "2025-01-24 11:38:16 -0700", "tests/library_checker_aizu_tests/trees/subtree_isomorphism.test.cpp": "2024-12-15 14:34:10 -0600" } \ No newline at end of file From 14968cfbdf7866ac88e401735bdb6768c026f461 Mon Sep 17 00:00:00 2001 From: Luke Videckis Date: Mon, 10 Feb 2025 12:56:09 -0700 Subject: [PATCH 09/36] more fixes --- tests/.config/.cppcheck_suppression_list | 22 +++++----------------- 1 file changed, 5 insertions(+), 17 deletions(-) diff --git a/tests/.config/.cppcheck_suppression_list b/tests/.config/.cppcheck_suppression_list index 1ad6e908..a2fd1969 100644 --- a/tests/.config/.cppcheck_suppression_list +++ b/tests/.config/.cppcheck_suppression_list @@ -3,19 +3,13 @@ missingIncludeSystem functionConst assertWithSideEffect unknownMacro +constParameterReference unusedStructMember:../library/flow/min_cost_max_flow.hpp +unusedStructMember:../library/flow/dinic.hpp:15 unusedStructMember:../library/strings/suffix_array/find/match.hpp:10 -unusedStructMember:../library/trees/tree_lift/tree_lift.hpp:17 -unusedStructMember:../library/trees/ladder_decomposition/linear_kth_par.hpp:17 -unusedStructMember:../library/data_structures/dsu/dsu_bipartite.hpp:9 -unusedStructMember:../library/trees/linear_lca.hpp:15 -unusedScopedObject:../library/trees/centroid_decomp_uncommon/count_paths_per_length.hpp:12 -unusedScopedObject:library_checker_aizu_tests/cd_asserts.hpp:6 unusedScopedObject:../library/trees/centroid_decomp_uncommon/count_paths_per_node.hpp:14 unusedScopedObject:library_checker_aizu_tests/trees/centroid_path_dist.test.cpp:29 -unusedScopedObject:../library/trees/edge_centroid_decomp_uncommon/count_paths_per_length.hpp:13 unusedScopedObject:library_checker_aizu_tests/trees/edge_cd_lca.test.cpp:20 -unusedScopedObject:library_checker_aizu_tests/trees/edge_cd_reroot_dp.test.cpp:49 unusedScopedObject:library_checker_aizu_tests/trees/cd_jump_on_tree.test.cpp:20 unusedScopedObject:library_checker_aizu_tests/trees/cd_jump_on_tree.test.cpp:58 arrayIndexOutOfBoundsCond:library_checker_aizu_tests/math/linear_prime_sieve.test.cpp:17 @@ -37,10 +31,6 @@ constParameter:../library/data_structures/wavelet_merge/merge_sort_tree_updates. constParameter:../library/data_structures/wavelet_merge/wavelet_tree_updates.hpp:49 constParameter:../library/data_structures/wavelet_merge/wavelet_tree_updates.hpp:53 constParameter:../hackpack-cpp/content/number-theory/ModInt.h:45 -constParameter:../library/data_structures/deque_op/deque.hpp:10 -constParameter:../library/data_structures/deque_op/queue_only.hpp:29 -constParameter:../library/data_structures/uncommon/priority_queue_of_updates.hpp:43 -constParameter:../library/math/matrix_related/row_reduce.hpp:17 constParameter:library_checker_aizu_tests/data_structures/rmq_inc.test.cpp:11 variableScope:../kactl/content/number-theory/Factor.h:47 syntaxError:../library/math/n_choose_k/pascals_identity.hpp:4 @@ -59,11 +49,6 @@ constVariable:../kactl/content/numerical/NumberTheoreticTransform.h:30 constVariable:../kactl/content/graph/CompressTree.h:20 functionStatic:../library/monotonic_stack/monotonic_stack.hpp:10 constVariableReference:../kactl/content/graph/CompressTree.h:20 -constParameterReference:../library/data_structures/deque_op/queue_only.hpp:29 -constParameterReference:../library/data_structures/uncommon/priority_queue_of_updates.hpp:43 -constParameterReference:../kactl/stress-tests/utilities/genTree.h:8 -constParameterReference:../kactl/content/graph/BinaryLifting.h:29 -constParameterReference:../library/math/matrix_related/row_reduce.hpp:17 constVariableReference:../library/flow/min_cost_max_flow.hpp:43 constVariableReference:library_checker_aizu_tests/graphs/connected_components_of_complement_graph.test.cpp:21 constVariableReference:library_checker_aizu_tests/handmade_tests/dsu_size.test.cpp:39 @@ -73,3 +58,6 @@ derefInvalidIterator:../library/data_structures/uncommon/linear_rmq.hpp:28 derefInvalidIterator:library_checker_aizu_tests/handmade_tests/n_choose_k.test.cpp:13 unreadVariable:library_checker_aizu_tests/handmade_tests/permutation_tree_small.test.cpp:12 uninitvar:library_checker_aizu_tests/handmade_tests/seg_tree_find_small.test.cpp:41 +unusedFunction:../kactl/content/data-structures/UnionFind.h:14 +unusedFunction:../kactl/content/number-theory/ModPow.h:13 +unusedFunction:../kactl/stress-tests/utilities/genTree.h:49 From 4a34621a2556e16eb73fb2034a62b5cca5dd9e9b Mon Sep 17 00:00:00 2001 From: Luke Videckis Date: Mon, 10 Feb 2025 13:03:59 -0700 Subject: [PATCH 10/36] suppress another buggy clang tidy warning --- tests/.config/.clang-tidy | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/.config/.clang-tidy b/tests/.config/.clang-tidy index e446d1b6..b1126e4b 100644 --- a/tests/.config/.clang-tidy +++ b/tests/.config/.clang-tidy @@ -1,5 +1,6 @@ Checks: > -clang-analyzer-core.UndefinedBinaryOperatorResult, + -clang-analyzer-core.BitwiseShift, bugprone-argument-comment, bugprone-assert-side-effect, bugprone-bad-signal-to-kill-thread, From 3f655a264189c78b3dc082cbad67e2e7f46fafdf Mon Sep 17 00:00:00 2001 From: Luke Videckis Date: Mon, 10 Feb 2025 13:06:06 -0700 Subject: [PATCH 11/36] more fixes --- tests/.config/.cppcheck_suppression_list | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/.config/.cppcheck_suppression_list b/tests/.config/.cppcheck_suppression_list index a2fd1969..9c2775e4 100644 --- a/tests/.config/.cppcheck_suppression_list +++ b/tests/.config/.cppcheck_suppression_list @@ -7,7 +7,6 @@ constParameterReference unusedStructMember:../library/flow/min_cost_max_flow.hpp unusedStructMember:../library/flow/dinic.hpp:15 unusedStructMember:../library/strings/suffix_array/find/match.hpp:10 -unusedScopedObject:../library/trees/centroid_decomp_uncommon/count_paths_per_node.hpp:14 unusedScopedObject:library_checker_aizu_tests/trees/centroid_path_dist.test.cpp:29 unusedScopedObject:library_checker_aizu_tests/trees/edge_cd_lca.test.cpp:20 unusedScopedObject:library_checker_aizu_tests/trees/cd_jump_on_tree.test.cpp:20 @@ -52,6 +51,7 @@ constVariableReference:../kactl/content/graph/CompressTree.h:20 constVariableReference:../library/flow/min_cost_max_flow.hpp:43 constVariableReference:library_checker_aizu_tests/graphs/connected_components_of_complement_graph.test.cpp:21 constVariableReference:library_checker_aizu_tests/handmade_tests/dsu_size.test.cpp:39 +constVariableReference:../library/trees/centroid_decomp_uncommon/count_paths_per_length.hpp:34 constVariablePointer:../kactl/content/numerical/FastFourierTransform.h:39 cstyleCast:../kactl/content/numerical/FastFourierTransform.h:39 derefInvalidIterator:../library/data_structures/uncommon/linear_rmq.hpp:28 From 5eef2d627c578149a1ee36106be70afec42d8773 Mon Sep 17 00:00:00 2001 From: Luke Videckis Date: Mon, 10 Feb 2025 13:33:39 -0700 Subject: [PATCH 12/36] convert another one to basic string --- .../dsu/range_parallel_equivalence_classes.hpp | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/library/data_structures/dsu/range_parallel_equivalence_classes.hpp b/library/data_structures/dsu/range_parallel_equivalence_classes.hpp index 65a82f50..1a5e1327 100644 --- a/library/data_structures/dsu/range_parallel_equivalence_classes.hpp +++ b/library/data_structures/dsu/range_parallel_equivalence_classes.hpp @@ -5,13 +5,11 @@ //! @time O((n + q) * \alpha(n)) //! @space O(n + q) UF get_rp_dsu(const vector>& rests, int n) { - vector>> rests_by_len(n + 1); - for (auto [l1, l2, len] : rests) - rests_by_len[len].push_back({l1, l2}); + vector>> rests_by_len(n + 1); + for (auto [l1, l2, len] : rests) rests_by_len[len] += {l1, l2}; UF uf(n); for (int len = n; len > 0; len--) for (auto [l1, l2] : rests_by_len[len]) - if (uf.join(l1, l2)) - rests_by_len[len - 1].push_back({l1 + 1, l2 + 1}); + if (uf.join(l1, l2)) rests_by_len[len - 1] += {l1 + 1, l2 + 1}; return uf; } From 196f126cac58bfb85ff4b5b40cc13a6debb06e1b Mon Sep 17 00:00:00 2001 From: Luke Videckis Date: Mon, 10 Feb 2025 13:36:12 -0700 Subject: [PATCH 13/36] another one --- library/data_structures/uncommon/mode_query.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/library/data_structures/uncommon/mode_query.hpp b/library/data_structures/uncommon/mode_query.hpp index 1c1e205b..0eaf4a1c 100644 --- a/library/data_structures/uncommon/mode_query.hpp +++ b/library/data_structures/uncommon/mode_query.hpp @@ -4,7 +4,7 @@ const int b = 318; //!< sqrt(1e5) struct mode_query { int n; vi a, cnt, index_into_index; - vector index; + vector> index; vector> mode_blocks; //!< {mode, cnt} of range of blocks //! @param a compressed array: 0 <= a[i] < n @@ -16,7 +16,7 @@ struct mode_query { vector((n + b - 1) / b)) { rep(i, 0, n) { index_into_index[i] = sz(index[a[i]]); - index[a[i]].push_back(i); + index[a[i]] += i; } for (int start = 0; start < n; start += b) { int mode = a[start]; From 86f5ee9dbb45e61a0ccb9113a42da3f64d205981 Mon Sep 17 00:00:00 2001 From: Luke Videckis Date: Mon, 10 Feb 2025 13:38:04 -0700 Subject: [PATCH 14/36] format --- .../dsu/range_parallel_equivalence_classes.hpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/library/data_structures/dsu/range_parallel_equivalence_classes.hpp b/library/data_structures/dsu/range_parallel_equivalence_classes.hpp index 1a5e1327..730ce8f3 100644 --- a/library/data_structures/dsu/range_parallel_equivalence_classes.hpp +++ b/library/data_structures/dsu/range_parallel_equivalence_classes.hpp @@ -6,10 +6,12 @@ //! @space O(n + q) UF get_rp_dsu(const vector>& rests, int n) { vector>> rests_by_len(n + 1); - for (auto [l1, l2, len] : rests) rests_by_len[len] += {l1, l2}; + for (auto [l1, l2, len] : rests) + rests_by_len[len] += {l1, l2}; UF uf(n); for (int len = n; len > 0; len--) for (auto [l1, l2] : rests_by_len[len]) - if (uf.join(l1, l2)) rests_by_len[len - 1] += {l1 + 1, l2 + 1}; + if (uf.join(l1, l2)) + rests_by_len[len - 1] += {l1 + 1, l2 + 1}; return uf; } From 3647c7406de172d57c4430a425a4bd60e71e305d Mon Sep 17 00:00:00 2001 From: Luke Videckis Date: Mon, 10 Feb 2025 13:41:14 -0700 Subject: [PATCH 15/36] convert another to basic string --- library/data_structures/uncommon/permutation_tree.hpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/library/data_structures/uncommon/permutation_tree.hpp b/library/data_structures/uncommon/permutation_tree.hpp index 06201cd3..fbd98057 100644 --- a/library/data_structures/uncommon/permutation_tree.hpp +++ b/library/data_structures/uncommon/permutation_tree.hpp @@ -17,13 +17,13 @@ struct perm_tree { }; vector p; int root; - vector ch; + vector> ch; bool touches(int u, int v) { return p[u].mn_num == p[v].mn_num + p[v].len || p[v].mn_num == p[u].mn_num + p[u].len; } int allocate(int mn_i, int mn_v, int ln, bool join, - const vi& chs) { + const basic_string& chs) { p.push_back({mn_i, mn_v, ln, join}); ch.push_back(chs); return sz(ch) - 1; @@ -50,7 +50,7 @@ struct perm_tree { if (!empty(ch[u]) && touches(ch[u].back(), v)) { p[u].mn_num = min(p[u].mn_num, p[v].mn_num); p[u].len += p[v].len; - ch[u].push_back(v); + ch[u] += v; v = u; st.pop_back(); continue; @@ -73,7 +73,7 @@ struct perm_tree { break; } int min_num = p[v].mn_num; - vi chs(1 + sz(st) - idx, v); + basic_string chs(1 + sz(st) - idx, v); rep(j, idx, sz(st)) min_num = min(min_num, p[chs[j - idx] = st[j][0]].mn_num); v = allocate(l, min_num, i - l + 1, 0, chs); From 68b71477b755ec2b205df2e5fa48555dcdfb6b76 Mon Sep 17 00:00:00 2001 From: Luke Videckis Date: Mon, 10 Feb 2025 13:44:43 -0700 Subject: [PATCH 16/36] another one --- library/graphs/bridges_cuts/block_vertex_tree.hpp | 10 +++++----- .../graphs/biconnected_components.test.cpp | 3 +-- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/library/graphs/bridges_cuts/block_vertex_tree.hpp b/library/graphs/bridges_cuts/block_vertex_tree.hpp index 23702ac2..31aafc26 100644 --- a/library/graphs/bridges_cuts/block_vertex_tree.hpp +++ b/library/graphs/bridges_cuts/block_vertex_tree.hpp @@ -9,7 +9,7 @@ //! } //! vector>> adj(n); //! auto [num_bccs, bcc_id, is_cut] = cuts(adj, m); -//! vector bvt = block_vertex_tree(adj, +//! auto bvt = block_vertex_tree(adj, //! num_bccs, bcc_id); //! //! //to loop over each unique bcc containing a node u: @@ -23,18 +23,18 @@ //! [n, n + num_bccs) are BCC nodes //! @time O(n + m) //! @time O(n) -vector block_vertex_tree(const auto& adj, int num_bccs, +auto block_vertex_tree(const auto& adj, int num_bccs, const vi& bcc_id) { int n = sz(adj); - vector bvt(n + num_bccs); + vector> bvt(n + num_bccs); vector vis(num_bccs); rep(i, 0, n) { for (auto [_, e_id] : adj[i]) { int bccid = bcc_id[e_id]; if (!vis[bccid]) { vis[bccid] = 1; - bvt[i].push_back(bccid + n); - bvt[bccid + n].push_back(i); + bvt[i] += bccid + n; + bvt[bccid + n] += i; } } for (int bccid : bvt[i]) vis[bccid - n] = 0; diff --git a/tests/library_checker_aizu_tests/graphs/biconnected_components.test.cpp b/tests/library_checker_aizu_tests/graphs/biconnected_components.test.cpp index f6449190..2be352ae 100644 --- a/tests/library_checker_aizu_tests/graphs/biconnected_components.test.cpp +++ b/tests/library_checker_aizu_tests/graphs/biconnected_components.test.cpp @@ -16,8 +16,7 @@ int main() { edges[i] = make_pair(u, v); } auto [num_bccs, bcc_id, is_cut] = cuts(adj, m); - vector> bvt = - block_vertex_tree(adj, num_bccs, bcc_id); + auto bvt = block_vertex_tree(adj, num_bccs, bcc_id); assert( find(begin(bcc_id), end(bcc_id), -1) == end(bcc_id)); for (int i = 0; i < n; i++) { From 1631218caf1a55dace453d4450c46dd9ec361e38 Mon Sep 17 00:00:00 2001 From: Luke Videckis Date: Mon, 10 Feb 2025 13:46:23 -0700 Subject: [PATCH 17/36] another one --- library/graphs/bridges_cuts/bridge_tree.hpp | 7 +++---- .../graphs/two_edge_components.test.cpp | 3 +-- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/library/graphs/bridges_cuts/bridge_tree.hpp b/library/graphs/bridges_cuts/bridge_tree.hpp index a328c772..728ec86b 100644 --- a/library/graphs/bridges_cuts/bridge_tree.hpp +++ b/library/graphs/bridges_cuts/bridge_tree.hpp @@ -14,11 +14,10 @@ //! @endcode //! @time O(n + m) //! @space O(n) -vector bridge_tree(const auto& adj, int num_ccs, +auto bridge_tree(const auto& adj, int num_ccs, const vi& br_id, const vi& is_br) { - vector tree(num_ccs); + vector> tree(num_ccs); rep(i, 0, sz(adj)) for (auto [u, e_id] : adj[i]) if ( - is_br[e_id]) tree[br_id[i]] - .push_back(br_id[u]); + is_br[e_id]) tree[br_id[i]] += br_id[u]; return tree; } diff --git a/tests/library_checker_aizu_tests/graphs/two_edge_components.test.cpp b/tests/library_checker_aizu_tests/graphs/two_edge_components.test.cpp index 1ab0e485..5c7602cb 100644 --- a/tests/library_checker_aizu_tests/graphs/two_edge_components.test.cpp +++ b/tests/library_checker_aizu_tests/graphs/two_edge_components.test.cpp @@ -17,8 +17,7 @@ int main() { edges[i] = {u, v}; } auto [num_ccs, br_id, is_br] = bridges(adj, m); - vector> bt = - bridge_tree(adj, num_ccs, br_id, is_br); + auto bt = bridge_tree(adj, num_ccs, br_id, is_br); assert(find(begin(br_id), end(br_id), -1) == end(br_id)); // check correctness of bridge tree { From 3a969a66816ba3b753b54ba840cc115b7d2f6fbd Mon Sep 17 00:00:00 2001 From: Luke Videckis Date: Mon, 10 Feb 2025 13:47:58 -0700 Subject: [PATCH 18/36] another one --- library/graphs/enumerate_triangles.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/library/graphs/enumerate_triangles.hpp b/library/graphs/enumerate_triangles.hpp index 5c50437d..6e247cce 100644 --- a/library/graphs/enumerate_triangles.hpp +++ b/library/graphs/enumerate_triangles.hpp @@ -11,10 +11,10 @@ void enumerate_triangles(const vector& edges, int n, auto f) { vi deg(n); for (auto [u, v] : edges) deg[u]++, deg[v]++; - vector adj(n); + vector> adj(n); for (auto [u, v] : edges) { if (tie(deg[u], u) > tie(deg[v], v)) swap(u, v); - adj[u].push_back(v); + adj[u] += v; } vector seen(n); for (auto [u, v] : edges) { From 547087acaeb12e1540ce1bcd8b556d991668c042 Mon Sep 17 00:00:00 2001 From: Luke Videckis Date: Mon, 10 Feb 2025 13:50:35 -0700 Subject: [PATCH 19/36] another one --- .../add_edges_strongly_connected.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/library/graphs/strongly_connected_components/add_edges_strongly_connected.hpp b/library/graphs/strongly_connected_components/add_edges_strongly_connected.hpp index 28f509e6..8f7ac46f 100644 --- a/library/graphs/strongly_connected_components/add_edges_strongly_connected.hpp +++ b/library/graphs/strongly_connected_components/add_edges_strongly_connected.hpp @@ -21,11 +21,11 @@ vector extra_edges(const vector& adj, int num_sccs, const vi& scc_id) { if (num_sccs == 1) return {}; int n = sz(adj); - vector scc_adj(num_sccs); + vector> scc_adj(num_sccs); vector zero_in(num_sccs, 1); rep(i, 0, n) for (int u : adj[i]) { if (scc_id[i] == scc_id[u]) continue; - scc_adj[scc_id[i]].push_back(scc_id[u]); + scc_adj[scc_id[i]] += scc_id[u]; zero_in[scc_id[u]] = 0; } vector vis(num_sccs); From ab7535200ace92d8ececf467567accd168201bac Mon Sep 17 00:00:00 2001 From: Luke Videckis Date: Mon, 10 Feb 2025 13:52:44 -0700 Subject: [PATCH 20/36] another one --- library/strings/longest_common_subsequence/lcs_queries.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/library/strings/longest_common_subsequence/lcs_queries.hpp b/library/strings/longest_common_subsequence/lcs_queries.hpp index 25c2872d..e7bf70f5 100644 --- a/library/strings/longest_common_subsequence/lcs_queries.hpp +++ b/library/strings/longest_common_subsequence/lcs_queries.hpp @@ -16,11 +16,11 @@ vi lcs_queries(const auto& s, const auto& t, const vector>& queries) { int n = sz(s), m = sz(t), q = sz(queries); - vector>> qs(n); + vector>> qs(n); rep(i, 0, q) { auto [s_r, t_le, t_ri] = queries[i]; if (s_r == 0 || t_le == m) continue; - qs[s_r - 1].push_back({t_le, t_ri, i}); + qs[s_r - 1] += {t_le, t_ri, i}; } lcs_dp lcs(t); vi res(q); From 83d97f64bddb1c071531b28dbd3b9d27f6844f8c Mon Sep 17 00:00:00 2001 From: Luke Videckis Date: Mon, 10 Feb 2025 13:54:56 -0700 Subject: [PATCH 21/36] trying this --- .github/workflows/programming_team_code_ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/programming_team_code_ci.yml b/.github/workflows/programming_team_code_ci.yml index 756d14b4..c22d9e55 100644 --- a/.github/workflows/programming_team_code_ci.yml +++ b/.github/workflows/programming_team_code_ci.yml @@ -91,7 +91,7 @@ jobs: wget -qO- https://apt.llvm.org/llvm.sh | sudo bash -s -- 18 - name: build ptc run: make --directory=tests/ ptc - - uses: actions/upload-artifact@v3 + - uses: actions/upload-artifact@v4 with: name: ptc path: tests/ptc.pdf @@ -102,7 +102,7 @@ jobs: if: github.ref == 'refs/heads/dev' && github.event_name == 'push' steps: - uses: actions/checkout@v2 - - uses: actions/download-artifact@v3 + - uses: actions/download-artifact@v4 with: name: ptc path: tests/ptc.pdf From 3e87b9472801c152ceb05e8395d5e34929ae838b Mon Sep 17 00:00:00 2001 From: Luke Videckis Date: Mon, 10 Feb 2025 13:58:18 -0700 Subject: [PATCH 22/36] fix compile error in example init comment --- library/graphs/bridges_cuts/block_vertex_tree.hpp | 3 +-- library/graphs/bridges_cuts/bridge_tree.hpp | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/library/graphs/bridges_cuts/block_vertex_tree.hpp b/library/graphs/bridges_cuts/block_vertex_tree.hpp index 31aafc26..1f34baf1 100644 --- a/library/graphs/bridges_cuts/block_vertex_tree.hpp +++ b/library/graphs/bridges_cuts/block_vertex_tree.hpp @@ -9,8 +9,7 @@ //! } //! vector>> adj(n); //! auto [num_bccs, bcc_id, is_cut] = cuts(adj, m); -//! auto bvt = block_vertex_tree(adj, -//! num_bccs, bcc_id); +//! auto bvt = block_vertex_tree(adj, num_bccs, bcc_id); //! //! //to loop over each unique bcc containing a node u: //! for (int bccid : bvt[v]) { diff --git a/library/graphs/bridges_cuts/bridge_tree.hpp b/library/graphs/bridges_cuts/bridge_tree.hpp index 728ec86b..2170c56d 100644 --- a/library/graphs/bridges_cuts/bridge_tree.hpp +++ b/library/graphs/bridges_cuts/bridge_tree.hpp @@ -9,8 +9,7 @@ //! } //! vector>> adj(n); //! auto [num_ccs, br_id, is_br] = bridges(adj, m); -//! vector bt = bridge_tree(adj, -//! num_ccs, br_id, is_br); +//! auto bt = bridge_tree(adj, num_ccs, br_id, is_br); //! @endcode //! @time O(n + m) //! @space O(n) From b0673052f990ab4b9066617798dad2a3a76c6b2e Mon Sep 17 00:00:00 2001 From: Luke Videckis Date: Mon, 10 Feb 2025 14:02:17 -0700 Subject: [PATCH 23/36] another fix --- library/graphs/bridges_cuts/block_vertex_tree.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/library/graphs/bridges_cuts/block_vertex_tree.hpp b/library/graphs/bridges_cuts/block_vertex_tree.hpp index 1f34baf1..69d9e853 100644 --- a/library/graphs/bridges_cuts/block_vertex_tree.hpp +++ b/library/graphs/bridges_cuts/block_vertex_tree.hpp @@ -4,7 +4,7 @@ //! { //! vector> adj(n); //! auto [num_bccs, bcc_id, is_cut] = cuts(adj, m); -//! vector bvt = block_vertex_tree(adj, +//! auto bvt = block_vertex_tree(adj, //! num_bccs, bcc_id); //! } //! vector>> adj(n); From a143064b3d0a78eedb1755e77792cbb50f8eb9e7 Mon Sep 17 00:00:00 2001 From: Luke Videckis Date: Mon, 10 Feb 2025 14:02:34 -0700 Subject: [PATCH 24/36] yet another fix --- library/graphs/bridges_cuts/bridge_tree.hpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/library/graphs/bridges_cuts/bridge_tree.hpp b/library/graphs/bridges_cuts/bridge_tree.hpp index 2170c56d..0781c50b 100644 --- a/library/graphs/bridges_cuts/bridge_tree.hpp +++ b/library/graphs/bridges_cuts/bridge_tree.hpp @@ -4,8 +4,7 @@ //! { //! vector> adj(n); //! auto [num_ccs, br_id, is_br] = bridges(adj, m); -//! vector bt = bridge_tree(adj, -//! num_ccs, br_id, is_br); +//! auto bt = bridge_tree(adj, num_ccs, br_id, is_br); //! } //! vector>> adj(n); //! auto [num_ccs, br_id, is_br] = bridges(adj, m); From 7b2cf61564422a2396a2d189d6cd7d8f2c7197ab Mon Sep 17 00:00:00 2001 From: Luke Videckis Date: Mon, 10 Feb 2025 14:03:40 -0700 Subject: [PATCH 25/36] trying thisasdfkljasdfaslkdjf --- .github/workflows/programming_team_code_ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/programming_team_code_ci.yml b/.github/workflows/programming_team_code_ci.yml index c22d9e55..e85f293d 100644 --- a/.github/workflows/programming_team_code_ci.yml +++ b/.github/workflows/programming_team_code_ci.yml @@ -39,7 +39,7 @@ jobs: sudo apt install -y wget software-properties-common wget -O - https://apt.llvm.org/llvm.sh | sudo bash - name: Install dependencies - run: sudo apt update && sudo apt install -y clang-format-18 cppcheck + run: sudo apt update && sudo apt install -y clang-format-19 cppcheck - name: checks format then lints run: make --directory=tests/ check_format_lint From eb0878fb921340b6ac67703981954f114fbebeb1 Mon Sep 17 00:00:00 2001 From: Luke Videckis Date: Mon, 10 Feb 2025 14:05:25 -0700 Subject: [PATCH 26/36] new version of clang? --- tests/scripts/check_format_lint.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/scripts/check_format_lint.sh b/tests/scripts/check_format_lint.sh index d9e555b8..fb5a2f82 100755 --- a/tests/scripts/check_format_lint.sh +++ b/tests/scripts/check_format_lint.sh @@ -36,7 +36,7 @@ find ../library/ library_checker_aizu_tests/ -name "*[A-Z]*" -or -name "*-*" | grep --invert-match "README" && exit 1 -clang-format-18 --dry-run --Werror --style=file:.config/.clang-format library_checker_aizu_tests/**/*.hpp ../library/**/*.hpp ../library/**/*.cpp || exit 1 +clang-format-19 --dry-run --Werror --style=file:.config/.clang-format library_checker_aizu_tests/**/*.hpp ../library/**/*.hpp ../library/**/*.cpp || exit 1 git submodule init git submodule update From 582aa204d816bec721eee63e0951d32a058755ad Mon Sep 17 00:00:00 2001 From: GitHub Date: Mon, 10 Feb 2025 21:52:58 +0000 Subject: [PATCH 27/36] [auto-verifier] verify commit eb0878fb921340b6ac67703981954f114fbebeb1 --- .verify-helper/timestamps.remote.json | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/.verify-helper/timestamps.remote.json b/.verify-helper/timestamps.remote.json index 707d2356..994256f5 100644 --- a/.verify-helper/timestamps.remote.json +++ b/.verify-helper/timestamps.remote.json @@ -32,13 +32,13 @@ "tests/library_checker_aizu_tests/data_structures/line_tree_aizu.test.cpp": "2025-01-24 11:38:16 -0700", "tests/library_checker_aizu_tests/data_structures/line_tree_lib_checker.test.cpp": "2025-01-24 11:38:16 -0700", "tests/library_checker_aizu_tests/data_structures/merge_sort_tree.test.cpp": "2024-11-17 14:04:03 -0600", -"tests/library_checker_aizu_tests/data_structures/mode_query.test.cpp": "2024-12-05 10:41:42 -0600", -"tests/library_checker_aizu_tests/data_structures/permutation_tree.test.cpp": "2024-12-14 15:47:13 -0600", +"tests/library_checker_aizu_tests/data_structures/mode_query.test.cpp": "2025-02-10 13:36:12 -0700", +"tests/library_checker_aizu_tests/data_structures/permutation_tree.test.cpp": "2025-02-10 13:41:14 -0700", "tests/library_checker_aizu_tests/data_structures/persistent_queue_tree.test.cpp": "2025-01-24 11:38:16 -0700", "tests/library_checker_aizu_tests/data_structures/persistent_seg_tree.test.cpp": "2024-12-05 10:41:42 -0600", "tests/library_checker_aizu_tests/data_structures/pq_ds_undo_sliding_window.test.cpp": "2025-01-24 11:38:16 -0700", "tests/library_checker_aizu_tests/data_structures/pq_ds_undo_with_dsu.test.cpp": "2025-01-24 11:38:16 -0700", -"tests/library_checker_aizu_tests/data_structures/range_parallel_dsu.test.cpp": "2024-12-15 14:34:10 -0600", +"tests/library_checker_aizu_tests/data_structures/range_parallel_dsu.test.cpp": "2025-02-10 13:38:04 -0700", "tests/library_checker_aizu_tests/data_structures/rmq_disjoint_sparse_table.test.cpp": "2024-12-15 14:34:10 -0600", "tests/library_checker_aizu_tests/data_structures/rmq_linear.test.cpp": "2024-12-15 14:34:10 -0600", "tests/library_checker_aizu_tests/data_structures/rmq_sparse_table.test.cpp": "2025-01-24 11:38:16 -0700", @@ -50,18 +50,18 @@ "tests/library_checker_aizu_tests/flow/dinic_aizu.test.cpp": "2024-11-17 14:04:03 -0600", "tests/library_checker_aizu_tests/flow/hungarian.test.cpp": "2024-11-17 14:04:03 -0600", "tests/library_checker_aizu_tests/flow/min_cost_max_flow.test.cpp": "2024-12-05 10:41:42 -0600", -"tests/library_checker_aizu_tests/graphs/biconnected_components.test.cpp": "2025-01-24 10:59:16 -0700", +"tests/library_checker_aizu_tests/graphs/biconnected_components.test.cpp": "2025-02-10 14:02:17 -0700", "tests/library_checker_aizu_tests/graphs/connected_components_of_complement_graph.test.cpp": "2024-12-14 19:50:29 -0600", "tests/library_checker_aizu_tests/graphs/dijkstra_aizu.test.cpp": "2024-12-14 19:50:29 -0600", "tests/library_checker_aizu_tests/graphs/dijkstra_lib_checker.test.cpp": "2024-12-14 19:50:29 -0600", -"tests/library_checker_aizu_tests/graphs/directed_cycle.test.cpp": "2025-01-24 10:59:16 -0700", -"tests/library_checker_aizu_tests/graphs/enumerate_triangles.test.cpp": "2024-12-14 19:50:29 -0600", +"tests/library_checker_aizu_tests/graphs/directed_cycle.test.cpp": "2025-02-10 13:50:35 -0700", +"tests/library_checker_aizu_tests/graphs/enumerate_triangles.test.cpp": "2025-02-10 13:47:58 -0700", "tests/library_checker_aizu_tests/graphs/hopcroft_karp_aizu.test.cpp": "2025-01-24 10:59:16 -0700", "tests/library_checker_aizu_tests/graphs/hopcroft_karp_lib_checker.test.cpp": "2025-01-24 10:59:16 -0700", "tests/library_checker_aizu_tests/graphs/mst.test.cpp": "2024-11-17 14:04:03 -0600", -"tests/library_checker_aizu_tests/graphs/strongly_connected_components_aizu.test.cpp": "2025-01-24 11:38:16 -0700", -"tests/library_checker_aizu_tests/graphs/strongly_connected_components_lib_checker.test.cpp": "2025-01-24 11:38:16 -0700", -"tests/library_checker_aizu_tests/graphs/two_edge_components.test.cpp": "2025-01-24 10:59:16 -0700", +"tests/library_checker_aizu_tests/graphs/strongly_connected_components_aizu.test.cpp": "2025-02-10 13:50:35 -0700", +"tests/library_checker_aizu_tests/graphs/strongly_connected_components_lib_checker.test.cpp": "2025-02-10 13:50:35 -0700", +"tests/library_checker_aizu_tests/graphs/two_edge_components.test.cpp": "2025-02-10 14:02:34 -0700", "tests/library_checker_aizu_tests/handmade_tests/count_paths_forest.test.cpp": "2024-12-15 14:34:10 -0600", "tests/library_checker_aizu_tests/handmade_tests/dsu_size.test.cpp": "2024-12-14 19:50:29 -0600", "tests/library_checker_aizu_tests/handmade_tests/dynamic_bitset.test.cpp": "2025-01-24 11:38:16 -0700", @@ -74,7 +74,7 @@ "tests/library_checker_aizu_tests/handmade_tests/mobius.test.cpp": "2025-01-24 11:38:16 -0700", "tests/library_checker_aizu_tests/handmade_tests/mod_int.test.cpp": "2024-12-14 19:50:29 -0600", "tests/library_checker_aizu_tests/handmade_tests/n_choose_k.test.cpp": "2025-01-15 00:22:31 -0700", -"tests/library_checker_aizu_tests/handmade_tests/permutation_tree_small.test.cpp": "2024-12-14 15:47:13 -0600", +"tests/library_checker_aizu_tests/handmade_tests/permutation_tree_small.test.cpp": "2025-02-10 13:41:14 -0700", "tests/library_checker_aizu_tests/handmade_tests/rmq_small_n.test.cpp": "2024-12-14 19:50:29 -0600", "tests/library_checker_aizu_tests/handmade_tests/sa_find_subarray.test.cpp": "2025-01-24 11:38:16 -0700", "tests/library_checker_aizu_tests/handmade_tests/seg_tree_find.test.cpp": "2024-12-14 19:50:29 -0600", @@ -106,7 +106,7 @@ "tests/library_checker_aizu_tests/monotonic_stack_related/max_rect_histogram.test.cpp": "2025-01-24 11:38:16 -0700", "tests/library_checker_aizu_tests/strings/kmp.test.cpp": "2024-12-14 19:50:29 -0600", "tests/library_checker_aizu_tests/strings/lcs_dp.test.cpp": "2024-12-05 10:41:42 -0600", -"tests/library_checker_aizu_tests/strings/lcs_queries.test.cpp": "2024-12-14 19:50:29 -0600", +"tests/library_checker_aizu_tests/strings/lcs_queries.test.cpp": "2025-02-10 13:52:44 -0700", "tests/library_checker_aizu_tests/strings/lcs_queries_merge_sort_tree.test.cpp": "2024-12-05 10:41:42 -0600", "tests/library_checker_aizu_tests/strings/manacher.test.cpp": "2024-12-14 19:50:29 -0600", "tests/library_checker_aizu_tests/strings/multi_matching_bs.test.cpp": "2025-01-24 11:38:16 -0700", From bbb2a2e84dab167b679e6d4a02df351f548e1fef Mon Sep 17 00:00:00 2001 From: Luke Videckis Date: Mon, 10 Feb 2025 23:05:34 -0700 Subject: [PATCH 28/36] switch back ladder decomp --- .../ladder_decomposition/linear_kth_par.hpp | 39 +++++++++---------- 1 file changed, 19 insertions(+), 20 deletions(-) diff --git a/library/trees/ladder_decomposition/linear_kth_par.hpp b/library/trees/ladder_decomposition/linear_kth_par.hpp index 3587a97d..dfbba619 100644 --- a/library/trees/ladder_decomposition/linear_kth_par.hpp +++ b/library/trees/ladder_decomposition/linear_kth_par.hpp @@ -14,19 +14,17 @@ //! @space O(n) struct linear_kth_par { struct node { - int d, p = -1, dl, idx_j, idx_l; + int d, p = -1, dl, idx_j; + basic_string lad; }; vector t; vector j; - vi l; - linear_kth_par(const auto& adj): - t(sz(adj)), j(2 * sz(t)) { + linear_kth_par(const auto& adj) : t(sz(adj)), j(2 * sz(t)) { vi st; int pos = 1; auto add_j = [&]() -> void { - j[pos] = { - st[max(0, sz(st) - 1 - 2 * (pos & -pos))], - st[max(0, sz(st) - 1 - 4 * (pos & -pos))]}; + j[pos] = {st[max(0, sz(st) - 1 - 2 * (pos & -pos))], + st[max(0, sz(st) - 1 - 4 * (pos & -pos))]}; pos++; }; auto dfs = [&](auto&& self, int v) -> void { @@ -37,8 +35,7 @@ struct linear_kth_par { if (u != t[v].p) { t[u].d = t[t[u].p = v].d + 1; self(self, u); - if (t[t[u].dl].d > t[t[v].dl].d) - t[v].dl = t[u].dl; + if (t[t[u].dl].d > t[t[v].dl].d) t[v].dl = t[u].dl; add_j(); } st.pop_back(); @@ -47,23 +44,25 @@ struct linear_kth_par { if (t[i].p == -1) dfs(dfs, i); if (t[i].p == -1 || t[t[i].p].dl != t[i].dl) { int v = t[i].dl, len = (t[v].d - t[i].d) * 2; - t[v].idx_l = sz(l) + t[v].d; - for (; v != -1 && len--; v = t[v].p) - l.push_back(v); + auto& lad = t[v].lad; + for (; v != -1 && len--; v = t[v].p) lad += v; } } } int kth_par(int v, int k) { assert(0 <= k && k <= t[v].d); switch (k) { - case 0: return v; - case 1: return t[v].p; - case 2: return t[t[v].p].p; - default: - int i = bit_floor(unsigned(k / 3)); - auto [j1, j2] = j[(t[v].idx_j & -i) | i]; - int up = t[v].d - t[j2].d <= k ? j2 : j1; - return l[t[t[up].dl].idx_l - t[v].d + k]; + case 0: + return v; + case 1: + return t[v].p; + case 2: + return t[t[v].p].p; + default: + int i = bit_floor(unsigned(k / 3)); + auto [j1, j2] = j[(t[v].idx_j & -i) | i]; + int leaf = t[t[v].d - t[j2].d <= k ? j2 : j1].dl; + return t[leaf].lad[k + t[leaf].d - t[v].d]; } } }; From d792b2c8438c6d3223477bf6ac8082a7fc4cf607 Mon Sep 17 00:00:00 2001 From: Luke Videckis Date: Mon, 10 Feb 2025 23:08:54 -0700 Subject: [PATCH 29/36] now formatted --- .../ladder_decomposition/linear_kth_par.hpp | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/library/trees/ladder_decomposition/linear_kth_par.hpp b/library/trees/ladder_decomposition/linear_kth_par.hpp index dfbba619..6fde5810 100644 --- a/library/trees/ladder_decomposition/linear_kth_par.hpp +++ b/library/trees/ladder_decomposition/linear_kth_par.hpp @@ -19,12 +19,14 @@ struct linear_kth_par { }; vector t; vector j; - linear_kth_par(const auto& adj) : t(sz(adj)), j(2 * sz(t)) { + linear_kth_par(const auto& adj): + t(sz(adj)), j(2 * sz(t)) { vi st; int pos = 1; auto add_j = [&]() -> void { - j[pos] = {st[max(0, sz(st) - 1 - 2 * (pos & -pos))], - st[max(0, sz(st) - 1 - 4 * (pos & -pos))]}; + j[pos] = { + st[max(0, sz(st) - 1 - 2 * (pos & -pos))], + st[max(0, sz(st) - 1 - 4 * (pos & -pos))]}; pos++; }; auto dfs = [&](auto&& self, int v) -> void { @@ -35,7 +37,8 @@ struct linear_kth_par { if (u != t[v].p) { t[u].d = t[t[u].p = v].d + 1; self(self, u); - if (t[t[u].dl].d > t[t[v].dl].d) t[v].dl = t[u].dl; + if (t[t[u].dl].d > t[t[v].dl].d) + t[v].dl = t[u].dl; add_j(); } st.pop_back(); @@ -52,17 +55,14 @@ struct linear_kth_par { int kth_par(int v, int k) { assert(0 <= k && k <= t[v].d); switch (k) { - case 0: - return v; - case 1: - return t[v].p; - case 2: - return t[t[v].p].p; - default: - int i = bit_floor(unsigned(k / 3)); - auto [j1, j2] = j[(t[v].idx_j & -i) | i]; - int leaf = t[t[v].d - t[j2].d <= k ? j2 : j1].dl; - return t[leaf].lad[k + t[leaf].d - t[v].d]; + case 0: return v; + case 1: return t[v].p; + case 2: return t[t[v].p].p; + default: + int i = bit_floor(unsigned(k / 3)); + auto [j1, j2] = j[(t[v].idx_j & -i) | i]; + int leaf = t[t[v].d - t[j2].d <= k ? j2 : j1].dl; + return t[leaf].lad[k + t[leaf].d - t[v].d]; } } }; From 96931a468408ff1739e24d24ae5023eb515b7554 Mon Sep 17 00:00:00 2001 From: Luke Videckis Date: Mon, 10 Feb 2025 23:11:06 -0700 Subject: [PATCH 30/36] fix cppcheck --- tests/.config/.cppcheck_suppression_list | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/.config/.cppcheck_suppression_list b/tests/.config/.cppcheck_suppression_list index 5cebe8c2..b4d164fa 100644 --- a/tests/.config/.cppcheck_suppression_list +++ b/tests/.config/.cppcheck_suppression_list @@ -60,3 +60,4 @@ uninitvar:library_checker_aizu_tests/handmade_tests/seg_tree_find_small.test.cpp unusedFunction:../kactl/content/data-structures/UnionFind.h:14 unusedFunction:../kactl/content/number-theory/ModPow.h:13 unusedFunction:../kactl/stress-tests/utilities/genTree.h:49 +assertWithSideEffect:library_checker_aizu_tests/math/xor_basis_intersection.test.cpp:27 From 01eabf574fc840aeb607e2a1377c603a9637e775 Mon Sep 17 00:00:00 2001 From: Luke Videckis Date: Mon, 10 Feb 2025 23:12:34 -0700 Subject: [PATCH 31/36] switch over another place --- library/data_structures/dsu/kruskal_tree.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/library/data_structures/dsu/kruskal_tree.hpp b/library/data_structures/dsu/kruskal_tree.hpp index 745517c2..56b02e55 100644 --- a/library/data_structures/dsu/kruskal_tree.hpp +++ b/library/data_structures/dsu/kruskal_tree.hpp @@ -5,7 +5,7 @@ struct kr_tree { int id; vi p; - vector adj; + vector> adj; kr_tree(int n): id(n), p(2 * n, -1), adj(2 * n) {} int find(int v) { return p[v] < 0 ? v : p[v] = find(p[v]); From 8c0ff8b925c36c2a53e14393a48b7601eedd23f9 Mon Sep 17 00:00:00 2001 From: Luke Videckis Date: Mon, 10 Feb 2025 23:14:33 -0700 Subject: [PATCH 32/36] another place --- .../data_structures/seg_tree_uncommon/merge_sort_tree.hpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/library/data_structures/seg_tree_uncommon/merge_sort_tree.hpp b/library/data_structures/seg_tree_uncommon/merge_sort_tree.hpp index 76be7d50..706a03d8 100644 --- a/library/data_structures/seg_tree_uncommon/merge_sort_tree.hpp +++ b/library/data_structures/seg_tree_uncommon/merge_sort_tree.hpp @@ -2,15 +2,13 @@ #include "../lazy_seg_tree_midpoint.hpp" struct merge_sort_tree { int n; - vector tree; + vector> tree; merge_sort_tree(const vi& a): n(sz(a)), tree(2 * n) { int pw2 = bit_ceil(size(a)); rep(i, 0, n) tree[(i + pw2) % n + n] = {a[i]}; for (int i = n - 1; i >= 1; i--) { - tree[i].resize( - sz(tree[2 * i]) + sz(tree[2 * i + 1])); ranges::merge(tree[2 * i], tree[2 * i + 1], - begin(tree[i])); + back_inserter(tree[i])); } } //! count of i in [l, r) such that a[i] in [vl, vr) From ee1a2aed27dc65b69b964c9257e42a3581d86d0d Mon Sep 17 00:00:00 2001 From: Luke Videckis Date: Mon, 10 Feb 2025 23:17:36 -0700 Subject: [PATCH 33/36] allow basic string for graph input --- .../add_edges_strongly_connected.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/library/graphs/strongly_connected_components/add_edges_strongly_connected.hpp b/library/graphs/strongly_connected_components/add_edges_strongly_connected.hpp index 8f7ac46f..732d121f 100644 --- a/library/graphs/strongly_connected_components/add_edges_strongly_connected.hpp +++ b/library/graphs/strongly_connected_components/add_edges_strongly_connected.hpp @@ -17,8 +17,8 @@ //! @time O(n + m) //! @space An O(n) edge list is allocated and returned, but //! multiple O(n + m) vectors are allocated temporarily -vector extra_edges(const vector& adj, - int num_sccs, const vi& scc_id) { +vector extra_edges(const auto& adj, int num_sccs, + const vi& scc_id) { if (num_sccs == 1) return {}; int n = sz(adj); vector> scc_adj(num_sccs); From e9e168153815e4a0088773afd6c9477ca5f4c22a Mon Sep 17 00:00:00 2001 From: Luke Videckis Date: Mon, 10 Feb 2025 23:19:24 -0700 Subject: [PATCH 34/36] switch another place --- library/trees/ladder_decomposition/ladder_decomposition.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/library/trees/ladder_decomposition/ladder_decomposition.hpp b/library/trees/ladder_decomposition/ladder_decomposition.hpp index 15264021..1cfca41e 100644 --- a/library/trees/ladder_decomposition/ladder_decomposition.hpp +++ b/library/trees/ladder_decomposition/ladder_decomposition.hpp @@ -15,7 +15,7 @@ struct ladder { //! @param adj forest (rooted or unrooted) //! @time O(n log n) //! @space O(n log n) for b_tbl. Everything else is O(n) - ladder(const vector& adj): + ladder(const auto& adj): n(sz(adj)), d(n), p(n, -1), dl(n), idx_l(n) { auto dfs = [&](auto&& self, int v) -> void { dl[v] = v; From b0d2ea78c1269ae5eb4e84fc43386d4d9cba7da8 Mon Sep 17 00:00:00 2001 From: Luke Videckis Date: Mon, 10 Feb 2025 23:26:26 -0700 Subject: [PATCH 35/36] changed another place --- library/graphs/functional_graph_processor.hpp | 4 +- .../handmade_tests/functional_graph.test.cpp | 62 ++++++++++--------- 2 files changed, 34 insertions(+), 32 deletions(-) diff --git a/library/graphs/functional_graph_processor.hpp b/library/graphs/functional_graph_processor.hpp index f42e507e..6f0d2e81 100644 --- a/library/graphs/functional_graph_processor.hpp +++ b/library/graphs/functional_graph_processor.hpp @@ -14,7 +14,7 @@ struct func_graph { struct node { pii root_of; - vi childs; + basic_string childs; }; vector t; vector cycle; @@ -40,7 +40,7 @@ struct func_graph { int v = i; while (state[v] == 1) { t[v].root_of = t[u].root_of; - t[a[v]].childs.push_back(v); + t[a[v]].childs += v; state[v] = 2; v = a[v]; } diff --git a/tests/library_checker_aizu_tests/handmade_tests/functional_graph.test.cpp b/tests/library_checker_aizu_tests/handmade_tests/functional_graph.test.cpp index 8bb0531a..4cb44c7c 100644 --- a/tests/library_checker_aizu_tests/handmade_tests/functional_graph.test.cpp +++ b/tests/library_checker_aizu_tests/handmade_tests/functional_graph.test.cpp @@ -1,5 +1,4 @@ -#define PROBLEM \ - "https://onlinejudge.u-aizu.ac.jp/problems/ITP1_1_A" +#define PROBLEM "https://onlinejudge.u-aizu.ac.jp/problems/ITP1_1_A" #include "../template.hpp" #include "../../../library/contest/random.hpp" #include "../../../library/graphs/functional_graph_processor.hpp" @@ -9,7 +8,7 @@ struct functional_graph_processor { init(sz(next)); build(next); } - template + template functional_graph_processor(const Graph_t &g) { init(g.n); build(g); @@ -101,24 +100,31 @@ struct functional_graph_processor { } int n; vector> cycle; - vector cycle_id; // id of the cycle it belongs to, - // -1 if not part of one - vector cycle_pos; // position in its cycle, -1 if - // not part of one - vector cycle_prev; // previous vertex in its cycle, - // -1 if not part of one - vector component_size; // size of its weakly - // connected component - vector root_of; // first reachable node in a cycle - vector depth; // distance to its root - vector> - abr; // forest of arborescences of reversed edges not - // on the cycles - vector order; // dfs order of abr - vector pos; // pos in the dfs order - vector end; // [pos[u], end[u]) denotes the subtree - vector size; // size of the subtree in abr + vector cycle_id; // id of the cycle it belongs to, + // -1 if not part of one + vector cycle_pos; // position in its cycle, -1 if + // not part of one + vector cycle_prev; // previous vertex in its cycle, + // -1 if not part of one + vector component_size; // size of its weakly + // connected component + vector root_of; // first reachable node in a cycle + vector depth; // distance to its root + vector> abr; // forest of arborescences of reversed edges not + // on the cycles + vector order; // dfs order of abr + vector pos; // pos in the dfs order + vector end; // [pos[u], end[u]) denotes the subtree + vector size; // size of the subtree in abr }; + +bool equal(const basic_string &a, const vi &b) { + if (sz(a) != sz(b)) return 0; + for (int i = 0; i < sz(a); i++) + if (a[i] != b[i]) return 0; + return 1; +} + int main() { cin.tie(0)->sync_with_stdio(0); for (int num_tests = 100; num_tests--;) { @@ -129,23 +135,19 @@ int main() { functional_graph_processor fgp(a); assert(cycle == fgp.cycle); for (int i = 0; i < n; i++) { - int root = - cycle[t[i].root_of.first][t[i].root_of.second]; + int root = cycle[t[i].root_of.first][t[i].root_of.second]; assert(root == fgp.root_of[i]); - assert(t[i].childs == fgp.abr[i]); + assert(equal(t[i].childs, fgp.abr[i])); assert((root == i) == (fgp.cycle_id[i] != -1)); if (root == i) { assert(t[i].root_of.first == fgp.cycle_id[i]); assert(t[i].root_of.second == fgp.cycle_pos[i]); int cyc_len = ssize(cycle[t[i].root_of.first]); - assert( - cycle[t[i].root_of.first] - [(t[i].root_of.second + 1) % cyc_len] == - a[i]); + assert(cycle[t[i].root_of.first][(t[i].root_of.second + 1) % cyc_len] == + a[i]); assert(fgp.cycle_prev[i] == - cycle[t[i].root_of.first] - [(t[i].root_of.second - 1 + cyc_len) % - cyc_len]); + cycle[t[i].root_of.first] + [(t[i].root_of.second - 1 + cyc_len) % cyc_len]); } else { assert(fgp.cycle_prev[i] == -1); } From 436c0d083866785e6a615e87ec4b4e6f48fbd384 Mon Sep 17 00:00:00 2001 From: Luke Videckis Date: Mon, 10 Feb 2025 23:28:32 -0700 Subject: [PATCH 36/36] another suppression --- tests/.config/.cppcheck_suppression_list | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/.config/.cppcheck_suppression_list b/tests/.config/.cppcheck_suppression_list index b4d164fa..43162f09 100644 --- a/tests/.config/.cppcheck_suppression_list +++ b/tests/.config/.cppcheck_suppression_list @@ -61,3 +61,4 @@ unusedFunction:../kactl/content/data-structures/UnionFind.h:14 unusedFunction:../kactl/content/number-theory/ModPow.h:13 unusedFunction:../kactl/stress-tests/utilities/genTree.h:49 assertWithSideEffect:library_checker_aizu_tests/math/xor_basis_intersection.test.cpp:27 +assertWithSideEffect:library_checker_aizu_tests/math/xor_basis_intersection.test.cpp:36