src/tree/hld/lib.hpp
| Line | Branch | Exec | Source |
|---|---|---|---|
| 1 | #pragma once | ||
| 2 | |||
| 3 | #include "../../ds/segtree/hp/lib.hpp" | ||
| 4 | #include "../dfs/info/lib.hpp" | ||
| 5 | #include "../dfs/top/lib.hpp" | ||
| 6 | #include "../ds/lib.hpp" | ||
| 7 | |||
| 8 | namespace tifa_libs { | ||
| 9 | namespace hld_impl_ { | ||
| 10 | template <bool enable_tag, tree_c tree_t, class T, auto op, class F, auto mapping, auto composition> | ||
| 11 | class hld { | ||
| 12 | segtree_impl_::segtree<enable_tag, T, op, F, mapping, composition> t; | ||
| 13 | |||
| 14 | public: | ||
| 15 | using tree_info_t = tree_dfs_info<tree_t, tdi_dfn, tdi_maxson, tdi_dep, tdi_fa>; | ||
| 16 | |||
| 17 | tree_t CR tr; | ||
| 18 | tree_info_t info; | ||
| 19 | vecu top; | ||
| 20 | |||
| 21 | 343 | CEXP hld(cT_(T) e, cT_(F) id, tree_t CR tr, tree_info_t CR info_) NE : t(e, id), tr(tr), info{info_}, top(tree_top<tree_t, true>(tr, info.dfn, info.maxson)) {} | |
| 22 | 103 | CEXP hld(cT_(T) e, cT_(F) id, tree_t CR tr) NE : hld(e, id, tr, tree_info_t(tr)) {} | |
| 23 | 240 | CEXP hld(cT_(T) e, cT_(F) id, tree_t CR tr, tree_info_t CR info_, spn<T> a) NE : hld(e, id, tr, info_) { | |
| 24 | 240 | vec<T> b(a.size()); | |
| 25 |
24/24tifa_libs::hld_impl_::hld<true, tifa_libs::tree<tifa_libs::graph_impl_::graph<tifa_libs::alist_impl_::alist_tag<void> > >, std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<13l> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<13l> > >, &(op_ab(std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<13l> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<13l> > >, std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<13l> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<13l> > >)), std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<13l> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<13l> > >, &(mapping(std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<13l> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<13l> > >&, std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<13l> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<13l> > >)), &(composition(std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<13l> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<13l> > >&, std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<13l> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<13l> > >))>::hld(std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<13l> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<13l> > >, std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<13l> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<13l> > >, tifa_libs::tree<tifa_libs::graph_impl_::graph<tifa_libs::alist_impl_::alist_tag<void> > > const&, tifa_libs::tree_dfs_info<tifa_libs::tree<tifa_libs::graph_impl_::graph<tifa_libs::alist_impl_::alist_tag<void> > >, tifa_libs::tdi_dfn, tifa_libs::tdi_maxson, tifa_libs::tdi_dep, tifa_libs::tdi_fa> const&, std::span<std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<13l> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<13l> > > const, 18446744073709551615ul>):
✓ Branch 5 taken 2334317 times.
✓ Branch 6 taken 20 times.
tifa_libs::hld_impl_::hld<true, tifa_libs::tree<tifa_libs::graph_impl_::graph<tifa_libs::alist_impl_::alist_tag<void> > >, std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<13l> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<13l> > >, &(op_ba(std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<13l> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<13l> > >, std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<13l> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<13l> > >)), std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<13l> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<13l> > >, &(mapping(std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<13l> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<13l> > >&, std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<13l> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<13l> > >)), &(composition(std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<13l> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<13l> > >&, std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<13l> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<13l> > >))>::hld(std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<13l> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<13l> > >, std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<13l> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<13l> > >, tifa_libs::tree<tifa_libs::graph_impl_::graph<tifa_libs::alist_impl_::alist_tag<void> > > const&, tifa_libs::tree_dfs_info<tifa_libs::tree<tifa_libs::graph_impl_::graph<tifa_libs::alist_impl_::alist_tag<void> > >, tifa_libs::tdi_dfn, tifa_libs::tdi_maxson, tifa_libs::tdi_dep, tifa_libs::tdi_fa> const&, std::span<std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<13l> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<13l> > > const, 18446744073709551615ul>):
✓ Branch 5 taken 2334317 times.
✓ Branch 6 taken 20 times.
tifa_libs::hld_impl_::hld<true, tifa_libs::tree<tifa_libs::graph_impl_::graph<tifa_libs::alist_impl_::alist_tag<void> > >, std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> > >, &(op_ab(std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> > >, std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> > >)), std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> > >, &(mapping(std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> > >&, std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> > >)), &(composition(std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> > >&, std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> > >))>::hld(std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> > >, std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> > >, tifa_libs::tree<tifa_libs::graph_impl_::graph<tifa_libs::alist_impl_::alist_tag<void> > > const&, tifa_libs::tree_dfs_info<tifa_libs::tree<tifa_libs::graph_impl_::graph<tifa_libs::alist_impl_::alist_tag<void> > >, tifa_libs::tdi_dfn, tifa_libs::tdi_maxson, tifa_libs::tdi_dep, tifa_libs::tdi_fa> const&, std::span<std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> > > const, 18446744073709551615ul>):
✓ Branch 5 taken 2334317 times.
✓ Branch 6 taken 20 times.
tifa_libs::hld_impl_::hld<true, tifa_libs::tree<tifa_libs::graph_impl_::graph<tifa_libs::alist_impl_::alist_tag<void> > >, std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> > >, &(op_ba(std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> > >, std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> > >)), std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> > >, &(mapping(std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> > >&, std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> > >)), &(composition(std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> > >&, std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> > >))>::hld(std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> > >, std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> > >, tifa_libs::tree<tifa_libs::graph_impl_::graph<tifa_libs::alist_impl_::alist_tag<void> > > const&, tifa_libs::tree_dfs_info<tifa_libs::tree<tifa_libs::graph_impl_::graph<tifa_libs::alist_impl_::alist_tag<void> > >, tifa_libs::tdi_dfn, tifa_libs::tdi_maxson, tifa_libs::tdi_dep, tifa_libs::tdi_fa> const&, std::span<std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> > > const, 18446744073709551615ul>):
✓ Branch 5 taken 2334317 times.
✓ Branch 6 taken 20 times.
tifa_libs::hld_impl_::hld<true, tifa_libs::tree<tifa_libs::graph_impl_::graph<tifa_libs::alist_impl_::alist_tag<void> > >, std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<13l> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<13l> > >, &(op_ab(std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<13l> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<13l> > >, std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<13l> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<13l> > >)), std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<13l> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<13l> > >, &(mapping(std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<13l> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<13l> > >&, std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<13l> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<13l> > >)), &(composition(std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<13l> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<13l> > >&, std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<13l> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<13l> > >))>::hld(std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<13l> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<13l> > >, std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<13l> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<13l> > >, tifa_libs::tree<tifa_libs::graph_impl_::graph<tifa_libs::alist_impl_::alist_tag<void> > > const&, tifa_libs::tree_dfs_info<tifa_libs::tree<tifa_libs::graph_impl_::graph<tifa_libs::alist_impl_::alist_tag<void> > >, tifa_libs::tdi_dfn, tifa_libs::tdi_maxson, tifa_libs::tdi_dep, tifa_libs::tdi_fa> const&, std::span<std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<13l> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<13l> > > const, 18446744073709551615ul>):
✓ Branch 5 taken 2334317 times.
✓ Branch 6 taken 20 times.
tifa_libs::hld_impl_::hld<true, tifa_libs::tree<tifa_libs::graph_impl_::graph<tifa_libs::alist_impl_::alist_tag<void> > >, std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<13l> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<13l> > >, &(op_ba(std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<13l> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<13l> > >, std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<13l> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<13l> > >)), std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<13l> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<13l> > >, &(mapping(std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<13l> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<13l> > >&, std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<13l> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<13l> > >)), &(composition(std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<13l> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<13l> > >&, std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<13l> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<13l> > >))>::hld(std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<13l> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<13l> > >, std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<13l> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<13l> > >, tifa_libs::tree<tifa_libs::graph_impl_::graph<tifa_libs::alist_impl_::alist_tag<void> > > const&, tifa_libs::tree_dfs_info<tifa_libs::tree<tifa_libs::graph_impl_::graph<tifa_libs::alist_impl_::alist_tag<void> > >, tifa_libs::tdi_dfn, tifa_libs::tdi_maxson, tifa_libs::tdi_dep, tifa_libs::tdi_fa> const&, std::span<std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<13l> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<13l> > > const, 18446744073709551615ul>):
✓ Branch 5 taken 2334317 times.
✓ Branch 6 taken 20 times.
tifa_libs::hld_impl_::hld<true, tifa_libs::tree<tifa_libs::graph_impl_::graph<tifa_libs::alist_impl_::alist_tag<void> > >, std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<13l> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<13l> > >, &(op_ab(std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<13l> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<13l> > >, std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<13l> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<13l> > >)), std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<13l> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<13l> > >, &(mapping(std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<13l> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<13l> > >&, std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<13l> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<13l> > >)), &(composition(std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<13l> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<13l> > >&, std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<13l> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<13l> > >))>::hld(std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<13l> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<13l> > >, std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<13l> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<13l> > >, tifa_libs::tree<tifa_libs::graph_impl_::graph<tifa_libs::alist_impl_::alist_tag<void> > > const&, tifa_libs::tree_dfs_info<tifa_libs::tree<tifa_libs::graph_impl_::graph<tifa_libs::alist_impl_::alist_tag<void> > >, tifa_libs::tdi_dfn, tifa_libs::tdi_maxson, tifa_libs::tdi_dep, tifa_libs::tdi_fa> const&, std::span<std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<13l> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<13l> > > const, 18446744073709551615ul>):
✓ Branch 5 taken 2334317 times.
✓ Branch 6 taken 20 times.
tifa_libs::hld_impl_::hld<true, tifa_libs::tree<tifa_libs::graph_impl_::graph<tifa_libs::alist_impl_::alist_tag<void> > >, std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<13l> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<13l> > >, &(op_ba(std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<13l> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<13l> > >, std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<13l> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<13l> > >)), std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<13l> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<13l> > >, &(mapping(std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<13l> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<13l> > >&, std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<13l> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<13l> > >)), &(composition(std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<13l> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<13l> > >&, std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<13l> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<13l> > >))>::hld(std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<13l> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<13l> > >, std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<13l> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<13l> > >, tifa_libs::tree<tifa_libs::graph_impl_::graph<tifa_libs::alist_impl_::alist_tag<void> > > const&, tifa_libs::tree_dfs_info<tifa_libs::tree<tifa_libs::graph_impl_::graph<tifa_libs::alist_impl_::alist_tag<void> > >, tifa_libs::tdi_dfn, tifa_libs::tdi_maxson, tifa_libs::tdi_dep, tifa_libs::tdi_fa> const&, std::span<std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<13l> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<13l> > > const, 18446744073709551615ul>):
✓ Branch 5 taken 2334317 times.
✓ Branch 6 taken 20 times.
tifa_libs::hld_impl_::hld<true, tifa_libs::tree<tifa_libs::graph_impl_::graph<tifa_libs::alist_impl_::alist_tag<void> > >, std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> > >, &(op_ab(std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> > >, std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> > >)), std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> > >, &(mapping(std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> > >&, std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> > >)), &(composition(std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> > >&, std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> > >))>::hld(std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> > >, std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> > >, tifa_libs::tree<tifa_libs::graph_impl_::graph<tifa_libs::alist_impl_::alist_tag<void> > > const&, tifa_libs::tree_dfs_info<tifa_libs::tree<tifa_libs::graph_impl_::graph<tifa_libs::alist_impl_::alist_tag<void> > >, tifa_libs::tdi_dfn, tifa_libs::tdi_maxson, tifa_libs::tdi_dep, tifa_libs::tdi_fa> const&, std::span<std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> > > const, 18446744073709551615ul>):
✓ Branch 5 taken 2334317 times.
✓ Branch 6 taken 20 times.
tifa_libs::hld_impl_::hld<true, tifa_libs::tree<tifa_libs::graph_impl_::graph<tifa_libs::alist_impl_::alist_tag<void> > >, std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> > >, &(op_ba(std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> > >, std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> > >)), std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> > >, &(mapping(std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> > >&, std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> > >)), &(composition(std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> > >&, std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> > >))>::hld(std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> > >, std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> > >, tifa_libs::tree<tifa_libs::graph_impl_::graph<tifa_libs::alist_impl_::alist_tag<void> > > const&, tifa_libs::tree_dfs_info<tifa_libs::tree<tifa_libs::graph_impl_::graph<tifa_libs::alist_impl_::alist_tag<void> > >, tifa_libs::tdi_dfn, tifa_libs::tdi_maxson, tifa_libs::tdi_dep, tifa_libs::tdi_fa> const&, std::span<std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> > > const, 18446744073709551615ul>):
✓ Branch 5 taken 2334317 times.
✓ Branch 6 taken 20 times.
tifa_libs::hld_impl_::hld<true, tifa_libs::tree<tifa_libs::graph_impl_::graph<tifa_libs::alist_impl_::alist_tag<void> > >, std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> > >, &(op_ab(std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> > >, std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> > >)), std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> > >, &(mapping(std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> > >&, std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> > >)), &(composition(std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> > >&, std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> > >))>::hld(std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> > >, std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> > >, tifa_libs::tree<tifa_libs::graph_impl_::graph<tifa_libs::alist_impl_::alist_tag<void> > > const&, tifa_libs::tree_dfs_info<tifa_libs::tree<tifa_libs::graph_impl_::graph<tifa_libs::alist_impl_::alist_tag<void> > >, tifa_libs::tdi_dfn, tifa_libs::tdi_maxson, tifa_libs::tdi_dep, tifa_libs::tdi_fa> const&, std::span<std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> > > const, 18446744073709551615ul>):
✓ Branch 5 taken 2334317 times.
✓ Branch 6 taken 20 times.
tifa_libs::hld_impl_::hld<true, tifa_libs::tree<tifa_libs::graph_impl_::graph<tifa_libs::alist_impl_::alist_tag<void> > >, std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> > >, &(op_ba(std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> > >, std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> > >)), std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> > >, &(mapping(std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> > >&, std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> > >)), &(composition(std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> > >&, std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> > >))>::hld(std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> > >, std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> > >, tifa_libs::tree<tifa_libs::graph_impl_::graph<tifa_libs::alist_impl_::alist_tag<void> > > const&, tifa_libs::tree_dfs_info<tifa_libs::tree<tifa_libs::graph_impl_::graph<tifa_libs::alist_impl_::alist_tag<void> > >, tifa_libs::tdi_dfn, tifa_libs::tdi_maxson, tifa_libs::tdi_dep, tifa_libs::tdi_fa> const&, std::span<std::pair<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> >, tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> > > const, 18446744073709551615ul>):
✓ Branch 5 taken 2334317 times.
✓ Branch 6 taken 20 times.
|
28012044 | flt_ (u32, i, 0, (u32)a.size()) b[info.dfn[i]] = a[i]; |
| 26 | 240 | build(b); | |
| 27 | 240 | } | |
| 28 | CEXP hld(tree_t CR tr, spn<T> a) NE : hld(tr, tree_info_t(tr), a) {} | ||
| 29 | |||
| 30 | 343 | CEXP void build(spn<T> a) NE { t.reset(a); } | |
| 31 | 1316911 | CEXP void chain_update(u32 u, u32 v, cT_(F) f) NE { | |
| 32 |
2/2✓ Branch 2 taken 915929 times.
✓ Branch 3 taken 1316911 times.
|
2232840 | while (top[u] != top[v]) { |
| 33 |
1/2✗ Branch 4 not taken.
✓ Branch 5 taken 915929 times.
|
915929 | if (info.dep[top[u]] < info.dep[top[v]]) swap(u, v); |
| 34 | 915929 | t.update(info.dfn[top[u]], info.dfn[u] + 1, f); | |
| 35 | 915929 | u = info.fa[top[u]]; | |
| 36 | } | ||
| 37 |
1/2✗ Branch 2 not taken.
✓ Branch 3 taken 1316911 times.
|
1316911 | if (info.dfn[u] < info.dfn[v]) swap(u, v); |
| 38 | 1316911 | t.update(info.dfn[v], info.dfn[u] + 1, f); | |
| 39 | 1316911 | } | |
| 40 | CEXP void subtree_update(u32 u, cT_(F) f) NE { t.update(info.dfn[u], info.dfn[u] + info.sz[u], f); } | ||
| 41 | 18037538 | CEXP void node_update(u32 u, cT_(F) f) NE { t.update(info.dfn[u], f); } | |
| 42 | CEXP void chain_set(u32 u, u32 v, cT_(T) f) NE { | ||
| 43 | while (top[u] != top[v]) { | ||
| 44 | if (info.dep[top[u]] < info.dep[top[v]]) swap(u, v); | ||
| 45 | t.set(info.dfn[top[u]], info.dfn[u] + 1, f), u = info.fa[top[u]]; | ||
| 46 | } | ||
| 47 | if (info.dfn[u] < info.dfn[v]) swap(u, v); | ||
| 48 | t.set(info.dfn[v], info.dfn[u] + 1, f); | ||
| 49 | } | ||
| 50 | CEXP void subtree_set(u32 u, cT_(T) f) NE { t.set(info.dfn[u], info.dfn[u] + info.sz[u], f); } | ||
| 51 | CEXP void node_set(u32 u, cT_(T) f) NE { t.set(info.dfn[u] + 1, f); } | ||
| 52 | 81570738 | CEXP T chain_query(u32 u, u32 v) NE { | |
| 53 | 81570738 | T ret = t.E; | |
| 54 |
2/2✓ Branch 2 taken 14863318 times.
✓ Branch 3 taken 5856714 times.
|
96434056 | while (top[u] != top[v]) { |
| 55 |
2/2✓ Branch 4 taken 6392817 times.
✓ Branch 5 taken 8470501 times.
|
14863318 | if (info.dep[top[u]] < info.dep[top[v]]) swap(u, v); |
| 56 | 14863318 | ret = op(ret, t.query(info.dfn[top[u]], info.dfn[u] + 1)), u = info.fa[top[u]]; | |
| 57 | } | ||
| 58 |
2/2✓ Branch 2 taken 1867507 times.
✓ Branch 3 taken 3989207 times.
|
81570738 | if (info.dfn[u] < info.dfn[v]) swap(u, v); |
| 59 | 81570738 | return op(ret, t.query(info.dfn[v], info.dfn[u] + 1)); | |
| 60 | } | ||
| 61 | 1917488 | CEXP T subtree_query(u32 u) NE { return t.query(info.dfn[u], info.dfn[u] + info.sz[u]); } | |
| 62 | CEXP T node_query(u32 u) NE { return t.query(info.dfn[u]); } | ||
| 63 | }; | ||
| 64 | } // namespace hld_impl_ | ||
| 65 | |||
| 66 | template <tree_c tree_t, class T, auto op, class F, auto mapping, auto composition> | ||
| 67 | using hld = hld_impl_::hld<true, tree_t, T, op, F, mapping, composition>; | ||
| 68 | template <tree_c tree_t, class T, auto op, auto mapping> | ||
| 69 | class hld_notag : public hld_impl_::hld<false, tree_t, T, op, T, mapping, mapping> { | ||
| 70 | using base = hld_impl_::hld<false, tree_t, T, op, T, mapping, mapping>; | ||
| 71 | |||
| 72 | public: | ||
| 73 | CEXP hld_notag(cT_(T) e, tree_t CR tr, base::tree_info_t CR info) NE : base(e, e, tr, info) {} | ||
| 74 | template <class V> | ||
| 75 | CEXP hld_notag(cT_(T) e, tree_t CR tr) NE : base(e, e, tr) {} | ||
| 76 | CEXP hld_notag(cT_(T) e, tree_t CR tr, base::tree_info_t CR info, spn<T> a) NE : base(e, e, tr, info, a) {} | ||
| 77 | }; | ||
| 78 | |||
| 79 | } // namespace tifa_libs | ||
| 80 |