src/ds/segtree/segbeats_ca_ms/lib.hpp
| Line | Branch | Exec | Source |
|---|---|---|---|
| 1 | #pragma once | ||
| 2 | |||
| 3 | #include "../../../util/alias/others/lib.hpp" | ||
| 4 | #include "../../../util/traits/math/lib.hpp" | ||
| 5 | |||
| 6 | namespace tifa_libs { | ||
| 7 | |||
| 8 | //! 0-based | ||
| 9 | template <class T, class TT = T> | ||
| 10 | requires(sizeof(T) <= sizeof(TT)) | ||
| 11 | struct segbeats_ca_ms { | ||
| 12 | static CEXP T INF = inf_v<T>; | ||
| 13 | |||
| 14 | struct TIFA { | ||
| 15 | TT sum = 0; | ||
| 16 | T max = 0, min = 0, max2 = -INF, min2 = INF; | ||
| 17 | u32 cmax = 1, cmin = 1; | ||
| 18 | T add = 0; | ||
| 19 | }; | ||
| 20 | |||
| 21 | vec<TIFA> v; | ||
| 22 | u32 n, lbn; | ||
| 23 | |||
| 24 | CEXP segbeats_ca_ms() = default; | ||
| 25 | CEXPE segbeats_ca_ms(u32 _n) NE : segbeats_ca_ms(vec<T>(_n)) {} | ||
| 26 | 53 | CEXPE segbeats_ca_ms(spn<T> a) NE { reset(a); } | |
| 27 | |||
| 28 | 53 | CEXP void reset(spn<T> a) NE { | |
| 29 |
2/4tifa_libs::segbeats_ca_ms<long, __int128>::reset(std::span<long const, 18446744073709551615ul>):
✗ Branch 1 not taken.
✓ Branch 2 taken 33 times.
tifa_libs::segbeats_ca_ms<long, long>::reset(std::span<long const, 18446744073709551615ul>):
✗ Branch 1 not taken.
✓ Branch 2 taken 20 times.
|
53 | if (a.empty()) { |
| 30 | ✗ | n = lbn = 0, v.clear(); | |
| 31 | ✗ | return; | |
| 32 | } | ||
| 33 | 53 | lbn = (u32)std::bit_width(a.size() - 1), n = 1_u32 << lbn, v.resize(2 * n); | |
| 34 |
4/4tifa_libs::segbeats_ca_ms<long, __int128>::reset(std::span<long const, 18446744073709551615ul>):
✓ Branch 5 taken 3252405 times.
✓ Branch 6 taken 33 times.
tifa_libs::segbeats_ca_ms<long, long>::reset(std::span<long const, 18446744073709551615ul>):
✓ Branch 5 taken 5926182 times.
✓ Branch 6 taken 20 times.
|
9178640 | flt_ (u32, i, 0, (u32)a.size()) v[i + n].sum = v[i + n].max = v[i + n].min = a[i]; |
| 35 |
4/4tifa_libs::segbeats_ca_ms<long, __int128>::reset(std::span<long const, 18446744073709551615ul>):
✓ Branch 1 taken 4326834 times.
✓ Branch 2 taken 33 times.
tifa_libs::segbeats_ca_ms<long, long>::reset(std::span<long const, 18446744073709551615ul>):
✓ Branch 1 taken 6753260 times.
✓ Branch 2 taken 20 times.
|
11080147 | for (u32 i = n - 1; i; --i) pushup(i); |
| 36 | } | ||
| 37 | 2045961 | CEXP void chmin(u32 l, u32 r, T x) NE { update_<1>(l, r, x); } | |
| 38 | 1891751 | CEXP void chmax(u32 l, u32 r, T x) NE { update_<2>(l, r, x); } | |
| 39 | 2800994 | CEXP void add(u32 l, u32 r, T x) NE { update_<3>(l, r, x); } | |
| 40 | CEXP void set(u32 l, u32 r, T x) NE { update_<4>(l, r, x); } | ||
| 41 | 532742 | CEXP T query_min(u32 l, u32 r) NE { return query_<1>(l, r); } | |
| 42 | 530342 | CEXP T query_max(u32 l, u32 r) NE { return query_<2>(l, r); } | |
| 43 | 1635297 | CEXP TT query_sum(u32 l, u32 r) NE { return query_<3>(l, r); } | |
| 44 | |||
| 45 | private: | ||
| 46 | template <int tp> | ||
| 47 | 5396762 | CEXP auto e() NE { | |
| 48 | 1065484 | if CEXP (tp == 1) return INF; | |
| 49 | 1060684 | if CEXP (tp == 2) return -INF; | |
| 50 | 3270594 | if CEXP (tp == 3) return (TT)0; | |
| 51 | } | ||
| 52 | template <int tp> | ||
| 53 | 34879713 | CEXP void op(auto& a, TIFA CR b) NE { | |
| 54 | 6724117 | if CEXP (tp == 1) a = min(a, b.min); | |
| 55 | 6695046 | if CEXP (tp == 2) a = max(a, b.max); | |
| 56 | 21460550 | if CEXP (tp == 3) a += b.sum; | |
| 57 | 34879713 | } | |
| 58 | template <int tp> | ||
| 59 | 82853032 | CEXP void apply_(u32 k, T x) NE { | |
| 60 | 24349082 | if CEXP (tp == 1) chmins_(k, x); | |
| 61 | 24937093 | if CEXP (tp == 2) chmaxs_(k, x); | |
| 62 | 33566857 | if CEXP (tp == 3) pdadd_(k, x); | |
| 63 | if CEXP (tp == 4) chmins_(k, x), chmaxs_(k, x); | ||
| 64 | 82853032 | } | |
| 65 | 94989880 | CEXP void chmins_(u32 k, T x) NE { | |
| 66 |
4/4tifa_libs::segbeats_ca_ms<long, __int128>::chmins_(unsigned int, long):
✓ Branch 1 taken 2941137 times.
✓ Branch 2 taken 50193391 times.
tifa_libs::segbeats_ca_ms<long, long>::chmins_(unsigned int, long):
✓ Branch 1 taken 8253441 times.
✓ Branch 2 taken 33601911 times.
|
94989880 | if (v[k].max <= x) return; |
| 67 |
4/4tifa_libs::segbeats_ca_ms<long, __int128>::chmins_(unsigned int, long):
✓ Branch 1 taken 30345428 times.
✓ Branch 2 taken 19847963 times.
tifa_libs::segbeats_ca_ms<long, long>::chmins_(unsigned int, long):
✓ Branch 1 taken 18129475 times.
✓ Branch 2 taken 15472436 times.
|
83795302 | if (v[k].max2 < x) return pdmin_(k, x); |
| 68 | 35320399 | pushdown(k), chmins_(k * 2, x), chmins_(k * 2 + 1, x), pushup(k); | |
| 69 | } | ||
| 70 | 127958647 | CEXP void chmaxs_(u32 k, T x) NE { | |
| 71 |
4/4tifa_libs::segbeats_ca_ms<long, __int128>::chmaxs_(unsigned int, long):
✓ Branch 1 taken 17888101 times.
✓ Branch 2 taken 72314280 times.
tifa_libs::segbeats_ca_ms<long, long>::chmaxs_(unsigned int, long):
✓ Branch 1 taken 8359046 times.
✓ Branch 2 taken 29397220 times.
|
127958647 | if (x <= v[k].min) return; |
| 72 |
4/4tifa_libs::segbeats_ca_ms<long, __int128>::chmaxs_(unsigned int, long):
✓ Branch 1 taken 34242036 times.
✓ Branch 2 taken 38072244 times.
tifa_libs::segbeats_ca_ms<long, long>::chmaxs_(unsigned int, long):
✓ Branch 1 taken 15958687 times.
✓ Branch 2 taken 13438533 times.
|
101711500 | if (x < v[k].min2) return pdmax_(k, x); |
| 73 | 51510777 | pushdown(k), chmaxs_(k * 2, x), chmaxs_(k * 2 + 1, x), pushup(k); | |
| 74 | } | ||
| 75 | |||
| 76 | 329430763 | CEXP void pushup(u32 k) NE { | |
| 77 | 329430763 | TIFA &p = v[k], &l = v[k * 2], &r = v[k * 2 + 1]; | |
| 78 | 329430763 | p.sum = l.sum + r.sum; | |
| 79 |
4/4tifa_libs::segbeats_ca_ms<long, __int128>::pushup(unsigned int):
✓ Branch 0 taken 83546285 times.
✓ Branch 1 taken 72061934 times.
tifa_libs::segbeats_ca_ms<long, long>::pushup(unsigned int):
✓ Branch 0 taken 58267547 times.
✓ Branch 1 taken 115554997 times.
|
329430763 | if (l.max == r.max) { |
| 80 | 141813832 | p.max = l.max; | |
| 81 | 141813832 | p.max2 = max(l.max2, r.max2); | |
| 82 | 141813832 | p.cmax = l.cmax + r.cmax; | |
| 83 | } else { | ||
| 84 | 187616931 | bool f = l.max > r.max; | |
| 85 |
4/4tifa_libs::segbeats_ca_ms<long, __int128>::pushup(unsigned int):
✓ Branch 0 taken 46828713 times.
✓ Branch 1 taken 25233221 times.
tifa_libs::segbeats_ca_ms<long, long>::pushup(unsigned int):
✓ Branch 0 taken 58867641 times.
✓ Branch 1 taken 56687356 times.
|
187616931 | p.max = f ? l.max : r.max; |
| 86 |
4/4tifa_libs::segbeats_ca_ms<long, __int128>::pushup(unsigned int):
✓ Branch 0 taken 46828713 times.
✓ Branch 1 taken 25233221 times.
tifa_libs::segbeats_ca_ms<long, long>::pushup(unsigned int):
✓ Branch 0 taken 58867641 times.
✓ Branch 1 taken 56687356 times.
|
187616931 | p.cmax = f ? l.cmax : r.cmax; |
| 87 |
8/8tifa_libs::segbeats_ca_ms<long, __int128>::pushup(unsigned int):
✓ Branch 0 taken 46828713 times.
✓ Branch 1 taken 25233221 times.
✓ Branch 2 taken 46828713 times.
✓ Branch 3 taken 25233221 times.
tifa_libs::segbeats_ca_ms<long, long>::pushup(unsigned int):
✓ Branch 0 taken 58867641 times.
✓ Branch 1 taken 56687356 times.
✓ Branch 2 taken 58867641 times.
✓ Branch 3 taken 56687356 times.
|
187616931 | p.max2 = max(f ? r.max : l.max, f ? l.max2 : r.max2); |
| 88 | } | ||
| 89 |
4/4tifa_libs::segbeats_ca_ms<long, __int128>::pushup(unsigned int):
✓ Branch 0 taken 88951188 times.
✓ Branch 1 taken 66657031 times.
tifa_libs::segbeats_ca_ms<long, long>::pushup(unsigned int):
✓ Branch 0 taken 57596339 times.
✓ Branch 1 taken 116226205 times.
|
329430763 | if (l.min == r.min) { |
| 90 | 146547527 | p.min = l.min; | |
| 91 | 146547527 | p.min2 = min(l.min2, r.min2); | |
| 92 | 146547527 | p.cmin = l.cmin + r.cmin; | |
| 93 | } else { | ||
| 94 | 182883236 | bool f = l.min < r.min; | |
| 95 |
4/4tifa_libs::segbeats_ca_ms<long, __int128>::pushup(unsigned int):
✓ Branch 0 taken 46151256 times.
✓ Branch 1 taken 20505775 times.
tifa_libs::segbeats_ca_ms<long, long>::pushup(unsigned int):
✓ Branch 0 taken 57147493 times.
✓ Branch 1 taken 59078712 times.
|
182883236 | p.min = f ? l.min : r.min; |
| 96 |
4/4tifa_libs::segbeats_ca_ms<long, __int128>::pushup(unsigned int):
✓ Branch 0 taken 46151256 times.
✓ Branch 1 taken 20505775 times.
tifa_libs::segbeats_ca_ms<long, long>::pushup(unsigned int):
✓ Branch 0 taken 57147493 times.
✓ Branch 1 taken 59078712 times.
|
182883236 | p.cmin = f ? l.cmin : r.cmin; |
| 97 |
8/8tifa_libs::segbeats_ca_ms<long, __int128>::pushup(unsigned int):
✓ Branch 0 taken 46151256 times.
✓ Branch 1 taken 20505775 times.
✓ Branch 2 taken 46151256 times.
✓ Branch 3 taken 20505775 times.
tifa_libs::segbeats_ca_ms<long, long>::pushup(unsigned int):
✓ Branch 0 taken 57147493 times.
✓ Branch 1 taken 59078712 times.
✓ Branch 2 taken 57147493 times.
✓ Branch 3 taken 59078712 times.
|
182883236 | p.min2 = min(f ? r.min : l.min, f ? l.min2 : r.min2); |
| 98 | } | ||
| 99 | 329430763 | } | |
| 100 | 413174161 | CEXP void pushdown(u32 k) NE { | |
| 101 | 413174161 | TIFA& p = v[k]; | |
| 102 |
4/4tifa_libs::segbeats_ca_ms<long, __int128>::pushdown(unsigned int):
✓ Branch 0 taken 42720086 times.
✓ Branch 1 taken 127465273 times.
tifa_libs::segbeats_ca_ms<long, long>::pushdown(unsigned int):
✓ Branch 0 taken 94069772 times.
✓ Branch 1 taken 148919030 times.
|
413174161 | if (p.add) pdadd_(k * 2, p.add), pdadd_(k * 2 + 1, p.add), p.add = 0; |
| 103 |
4/4tifa_libs::segbeats_ca_ms<long, __int128>::pushdown(unsigned int):
✓ Branch 1 taken 43646480 times.
✓ Branch 2 taken 126538879 times.
tifa_libs::segbeats_ca_ms<long, long>::pushdown(unsigned int):
✓ Branch 1 taken 23063737 times.
✓ Branch 2 taken 219925065 times.
|
413174161 | if (p.max < v[k * 2].max) pdmin_(k * 2, p.max); |
| 104 |
4/4tifa_libs::segbeats_ca_ms<long, __int128>::pushdown(unsigned int):
✓ Branch 1 taken 49604500 times.
✓ Branch 2 taken 120580859 times.
tifa_libs::segbeats_ca_ms<long, long>::pushdown(unsigned int):
✓ Branch 1 taken 22108873 times.
✓ Branch 2 taken 220879929 times.
|
413174161 | if (p.min > v[k * 2].min) pdmax_(k * 2, p.min); |
| 105 |
4/4tifa_libs::segbeats_ca_ms<long, __int128>::pushdown(unsigned int):
✓ Branch 1 taken 44847733 times.
✓ Branch 2 taken 125337626 times.
tifa_libs::segbeats_ca_ms<long, long>::pushdown(unsigned int):
✓ Branch 1 taken 23066062 times.
✓ Branch 2 taken 219922740 times.
|
413174161 | if (p.max < v[k * 2 + 1].max) pdmin_(k * 2 + 1, p.max); |
| 106 |
4/4tifa_libs::segbeats_ca_ms<long, __int128>::pushdown(unsigned int):
✓ Branch 1 taken 47628246 times.
✓ Branch 2 taken 122557113 times.
tifa_libs::segbeats_ca_ms<long, long>::pushdown(unsigned int):
✓ Branch 1 taken 22108485 times.
✓ Branch 2 taken 220880317 times.
|
413174161 | if (p.min > v[k * 2 + 1].min) pdmax_(k * 2 + 1, p.min); |
| 107 | 413174161 | } | |
| 108 | 307146573 | CEXP void pdadd_(u32 k, T x) NE { | |
| 109 | 307146573 | TIFA& p = v[k]; | |
| 110 | 307146573 | p.sum += (TT)x << ((int)lbn + std::countl_zero(k) - 31); | |
| 111 | 307146573 | p.max += x, p.min += x; | |
| 112 |
4/4tifa_libs::segbeats_ca_ms<long, __int128>::pdadd_(unsigned int, long):
✓ Branch 0 taken 22689212 times.
✓ Branch 1 taken 70344779 times.
tifa_libs::segbeats_ca_ms<long, long>::pdadd_(unsigned int, long):
✓ Branch 0 taken 128207073 times.
✓ Branch 1 taken 85905509 times.
|
307146573 | if (p.max2 != -INF) p.max2 += x; |
| 113 |
4/4tifa_libs::segbeats_ca_ms<long, __int128>::pdadd_(unsigned int, long):
✓ Branch 0 taken 22689212 times.
✓ Branch 1 taken 70344779 times.
tifa_libs::segbeats_ca_ms<long, long>::pdadd_(unsigned int, long):
✓ Branch 0 taken 128207073 times.
✓ Branch 1 taken 85905509 times.
|
307146573 | if (p.min2 != INF) p.min2 += x; |
| 114 | 307146573 | p.add += x; | |
| 115 | 307146573 | } | |
| 116 | 183098915 | void pdmin_(u32 k, T x) NE { | |
| 117 | 183098915 | TIFA& p = v[k]; | |
| 118 |
4/4tifa_libs::segbeats_ca_ms<long, __int128>::pdmin_(unsigned int, long):
✓ Branch 0 taken 39570101 times.
✓ Branch 1 taken 79269540 times.
tifa_libs::segbeats_ca_ms<long, long>::pdmin_(unsigned int, long):
✓ Branch 0 taken 56053010 times.
✓ Branch 1 taken 8206264 times.
|
183098915 | if (p.sum += ((TT)x - p.max) * p.cmax; p.min == p.max) p.min = x; |
| 119 |
4/4tifa_libs::segbeats_ca_ms<long, __int128>::pdmin_(unsigned int, long):
✓ Branch 0 taken 73073814 times.
✓ Branch 1 taken 45765827 times.
tifa_libs::segbeats_ca_ms<long, long>::pdmin_(unsigned int, long):
✓ Branch 0 taken 6602528 times.
✓ Branch 1 taken 57656746 times.
|
183098915 | if (p.min2 == p.max) p.min2 = x; |
| 120 | 183098915 | p.max = x; | |
| 121 | 183098915 | } | |
| 122 | 191650827 | void pdmax_(u32 k, T x) NE { | |
| 123 | 191650827 | TIFA& p = v[k]; | |
| 124 |
4/4tifa_libs::segbeats_ca_ms<long, __int128>::pdmax_(unsigned int, long):
✓ Branch 0 taken 43395557 times.
✓ Branch 1 taken 88079225 times.
tifa_libs::segbeats_ca_ms<long, long>::pdmax_(unsigned int, long):
✓ Branch 0 taken 52448197 times.
✓ Branch 1 taken 7727848 times.
|
191650827 | if (p.sum += ((TT)x - p.min) * p.cmin; p.max == p.min) p.max = x; |
| 125 |
4/4tifa_libs::segbeats_ca_ms<long, __int128>::pdmax_(unsigned int, long):
✓ Branch 0 taken 74165886 times.
✓ Branch 1 taken 57308896 times.
tifa_libs::segbeats_ca_ms<long, long>::pdmax_(unsigned int, long):
✓ Branch 0 taken 6260031 times.
✓ Branch 1 taken 53916014 times.
|
191650827 | if (p.max2 == p.min) p.max2 = x; |
| 126 | 191650827 | p.min = x; | |
| 127 | 191650827 | } | |
| 128 | template <int tp> | ||
| 129 | 6738706 | CEXP void update_(u32 l, u32 r, T x) NE { | |
| 130 |
12/24void tifa_libs::segbeats_ca_ms<long, __int128>::update_<1>(unsigned int, unsigned int, long):
✗ Branch 0 not taken.
✓ Branch 1 taken 1165612 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1165612 times.
void tifa_libs::segbeats_ca_ms<long, __int128>::update_<2>(unsigned int, unsigned int, long):
✗ Branch 0 not taken.
✓ Branch 1 taken 1013438 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1013438 times.
void tifa_libs::segbeats_ca_ms<long, __int128>::update_<3>(unsigned int, unsigned int, long):
✗ Branch 0 not taken.
✓ Branch 1 taken 692496 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 692496 times.
void tifa_libs::segbeats_ca_ms<long, long>::update_<1>(unsigned int, unsigned int, long):
✗ Branch 0 not taken.
✓ Branch 1 taken 880349 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 880349 times.
void tifa_libs::segbeats_ca_ms<long, long>::update_<2>(unsigned int, unsigned int, long):
✗ Branch 0 not taken.
✓ Branch 1 taken 878313 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 878313 times.
void tifa_libs::segbeats_ca_ms<long, long>::update_<3>(unsigned int, unsigned int, long):
✗ Branch 0 not taken.
✓ Branch 1 taken 2108498 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2108498 times.
|
6738706 | if (assert(l <= r); l == r) return; |
| 131 | 6738706 | l += n, r += n; | |
| 132 | 6738706 | cu32 zl = (u32)std::countr_zero(l), zr = (u32)std::countr_zero(r), zm = min(zl, zr); | |
| 133 |
12/12void tifa_libs::segbeats_ca_ms<long, __int128>::update_<1>(unsigned int, unsigned int, long):
✓ Branch 0 taken 20776338 times.
✓ Branch 1 taken 1165612 times.
void tifa_libs::segbeats_ca_ms<long, __int128>::update_<2>(unsigned int, unsigned int, long):
✓ Branch 0 taken 18036470 times.
✓ Branch 1 taken 1013438 times.
void tifa_libs::segbeats_ca_ms<long, __int128>::update_<3>(unsigned int, unsigned int, long):
✓ Branch 0 taken 12259689 times.
✓ Branch 1 taken 692496 times.
void tifa_libs::segbeats_ca_ms<long, long>::update_<1>(unsigned int, unsigned int, long):
✓ Branch 0 taken 16559982 times.
✓ Branch 1 taken 880349 times.
void tifa_libs::segbeats_ca_ms<long, long>::update_<2>(unsigned int, unsigned int, long):
✓ Branch 0 taken 16522359 times.
✓ Branch 1 taken 878313 times.
void tifa_libs::segbeats_ca_ms<long, long>::update_<3>(unsigned int, unsigned int, long):
✓ Branch 0 taken 39862190 times.
✓ Branch 1 taken 2108498 times.
|
130755734 | for (u32 i = lbn; i >= 1; i--) { |
| 134 |
12/12void tifa_libs::segbeats_ca_ms<long, __int128>::update_<1>(unsigned int, unsigned int, long):
✓ Branch 0 taken 19586593 times.
✓ Branch 1 taken 1189745 times.
void tifa_libs::segbeats_ca_ms<long, __int128>::update_<2>(unsigned int, unsigned int, long):
✓ Branch 0 taken 14403159 times.
✓ Branch 1 taken 3633311 times.
void tifa_libs::segbeats_ca_ms<long, __int128>::update_<3>(unsigned int, unsigned int, long):
✓ Branch 0 taken 11083183 times.
✓ Branch 1 taken 1176506 times.
void tifa_libs::segbeats_ca_ms<long, long>::update_<1>(unsigned int, unsigned int, long):
✓ Branch 0 taken 15678946 times.
✓ Branch 1 taken 881036 times.
void tifa_libs::segbeats_ca_ms<long, long>::update_<2>(unsigned int, unsigned int, long):
✓ Branch 0 taken 15645690 times.
✓ Branch 1 taken 876669 times.
void tifa_libs::segbeats_ca_ms<long, long>::update_<3>(unsigned int, unsigned int, long):
✓ Branch 0 taken 37754418 times.
✓ Branch 1 taken 2107772 times.
|
124017028 | if (((l >> i) << i) != l) pushdown(l >> i); |
| 135 |
12/12void tifa_libs::segbeats_ca_ms<long, __int128>::update_<1>(unsigned int, unsigned int, long):
✓ Branch 0 taken 19615464 times.
✓ Branch 1 taken 1160874 times.
void tifa_libs::segbeats_ca_ms<long, __int128>::update_<2>(unsigned int, unsigned int, long):
✓ Branch 0 taken 17093141 times.
✓ Branch 1 taken 943329 times.
void tifa_libs::segbeats_ca_ms<long, __int128>::update_<3>(unsigned int, unsigned int, long):
✓ Branch 0 taken 11579638 times.
✓ Branch 1 taken 680051 times.
void tifa_libs::segbeats_ca_ms<long, long>::update_<1>(unsigned int, unsigned int, long):
✓ Branch 0 taken 15682627 times.
✓ Branch 1 taken 877355 times.
void tifa_libs::segbeats_ca_ms<long, long>::update_<2>(unsigned int, unsigned int, long):
✓ Branch 0 taken 15642910 times.
✓ Branch 1 taken 879449 times.
void tifa_libs::segbeats_ca_ms<long, long>::update_<3>(unsigned int, unsigned int, long):
✓ Branch 0 taken 37753724 times.
✓ Branch 1 taken 2108466 times.
|
124017028 | if (((r >> i) << i) != r) pushdown((r - 1) >> i); |
| 136 | } | ||
| 137 | 6738706 | u32 l2 = l, r2 = r; | |
| 138 |
12/12void tifa_libs::segbeats_ca_ms<long, __int128>::update_<1>(unsigned int, unsigned int, long):
✓ Branch 0 taken 13281462 times.
✓ Branch 1 taken 1165612 times.
void tifa_libs::segbeats_ca_ms<long, __int128>::update_<2>(unsigned int, unsigned int, long):
✓ Branch 0 taken 15743323 times.
✓ Branch 1 taken 1013438 times.
void tifa_libs::segbeats_ca_ms<long, __int128>::update_<3>(unsigned int, unsigned int, long):
✓ Branch 0 taken 7824157 times.
✓ Branch 1 taken 692496 times.
void tifa_libs::segbeats_ca_ms<long, long>::update_<1>(unsigned int, unsigned int, long):
✓ Branch 0 taken 10820873 times.
✓ Branch 1 taken 880349 times.
void tifa_libs::segbeats_ca_ms<long, long>::update_<2>(unsigned int, unsigned int, long):
✓ Branch 0 taken 10790188 times.
✓ Branch 1 taken 878313 times.
void tifa_libs::segbeats_ca_ms<long, long>::update_<3>(unsigned int, unsigned int, long):
✓ Branch 0 taken 25767248 times.
✓ Branch 1 taken 2108498 times.
|
90965957 | while (l2 < r2) { |
| 139 |
12/12void tifa_libs::segbeats_ca_ms<long, __int128>::update_<1>(unsigned int, unsigned int, long):
✓ Branch 0 taken 6833332 times.
✓ Branch 1 taken 6448130 times.
void tifa_libs::segbeats_ca_ms<long, __int128>::update_<2>(unsigned int, unsigned int, long):
✓ Branch 0 taken 6684986 times.
✓ Branch 1 taken 9058337 times.
void tifa_libs::segbeats_ca_ms<long, __int128>::update_<3>(unsigned int, unsigned int, long):
✓ Branch 0 taken 3829248 times.
✓ Branch 1 taken 3994909 times.
void tifa_libs::segbeats_ca_ms<long, long>::update_<1>(unsigned int, unsigned int, long):
✓ Branch 0 taken 5502353 times.
✓ Branch 1 taken 5318520 times.
void tifa_libs::segbeats_ca_ms<long, long>::update_<2>(unsigned int, unsigned int, long):
✓ Branch 0 taken 5489094 times.
✓ Branch 1 taken 5301094 times.
void tifa_libs::segbeats_ca_ms<long, long>::update_<3>(unsigned int, unsigned int, long):
✓ Branch 0 taken 13091231 times.
✓ Branch 1 taken 12676017 times.
|
84227251 | if (l2 & 1) apply_<tp>(l2++, x); |
| 140 |
12/12void tifa_libs::segbeats_ca_ms<long, __int128>::update_<1>(unsigned int, unsigned int, long):
✓ Branch 0 taken 6605270 times.
✓ Branch 1 taken 6676192 times.
void tifa_libs::segbeats_ca_ms<long, __int128>::update_<2>(unsigned int, unsigned int, long):
✓ Branch 0 taken 7372907 times.
✓ Branch 1 taken 8370416 times.
void tifa_libs::segbeats_ca_ms<long, __int128>::update_<3>(unsigned int, unsigned int, long):
✓ Branch 0 taken 3764571 times.
✓ Branch 1 taken 4059586 times.
void tifa_libs::segbeats_ca_ms<long, long>::update_<1>(unsigned int, unsigned int, long):
✓ Branch 0 taken 5408127 times.
✓ Branch 1 taken 5412746 times.
void tifa_libs::segbeats_ca_ms<long, long>::update_<2>(unsigned int, unsigned int, long):
✓ Branch 0 taken 5390106 times.
✓ Branch 1 taken 5400082 times.
void tifa_libs::segbeats_ca_ms<long, long>::update_<3>(unsigned int, unsigned int, long):
✓ Branch 0 taken 12881807 times.
✓ Branch 1 taken 12885441 times.
|
84227251 | if (r2 & 1) apply_<tp>(--r2, x); |
| 141 | 84227251 | l2 /= 2, r2 /= 2; | |
| 142 | } | ||
| 143 |
12/12void tifa_libs::segbeats_ca_ms<long, __int128>::update_<1>(unsigned int, unsigned int, long):
✓ Branch 0 taken 20488712 times.
✓ Branch 1 taken 1165612 times.
void tifa_libs::segbeats_ca_ms<long, __int128>::update_<2>(unsigned int, unsigned int, long):
✓ Branch 0 taken 17663366 times.
✓ Branch 1 taken 1013438 times.
void tifa_libs::segbeats_ca_ms<long, __int128>::update_<3>(unsigned int, unsigned int, long):
✓ Branch 0 taken 12076391 times.
✓ Branch 1 taken 692496 times.
void tifa_libs::segbeats_ca_ms<long, long>::update_<1>(unsigned int, unsigned int, long):
✓ Branch 0 taken 16267175 times.
✓ Branch 1 taken 880349 times.
void tifa_libs::segbeats_ca_ms<long, long>::update_<2>(unsigned int, unsigned int, long):
✓ Branch 0 taken 16229407 times.
✓ Branch 1 taken 878313 times.
void tifa_libs::segbeats_ca_ms<long, long>::update_<3>(unsigned int, unsigned int, long):
✓ Branch 0 taken 39160056 times.
✓ Branch 1 taken 2108498 times.
|
128623813 | flt_ (u32, i, zm + 1, lbn + 1) { |
| 144 |
12/12void tifa_libs::segbeats_ca_ms<long, __int128>::update_<1>(unsigned int, unsigned int, long):
✓ Branch 0 taken 19586593 times.
✓ Branch 1 taken 902119 times.
void tifa_libs::segbeats_ca_ms<long, __int128>::update_<2>(unsigned int, unsigned int, long):
✓ Branch 0 taken 14403159 times.
✓ Branch 1 taken 3260207 times.
void tifa_libs::segbeats_ca_ms<long, __int128>::update_<3>(unsigned int, unsigned int, long):
✓ Branch 0 taken 11083183 times.
✓ Branch 1 taken 993208 times.
void tifa_libs::segbeats_ca_ms<long, long>::update_<1>(unsigned int, unsigned int, long):
✓ Branch 0 taken 15678946 times.
✓ Branch 1 taken 588229 times.
void tifa_libs::segbeats_ca_ms<long, long>::update_<2>(unsigned int, unsigned int, long):
✓ Branch 0 taken 15645690 times.
✓ Branch 1 taken 583717 times.
void tifa_libs::segbeats_ca_ms<long, long>::update_<3>(unsigned int, unsigned int, long):
✓ Branch 0 taken 37754418 times.
✓ Branch 1 taken 1405638 times.
|
121885107 | if (zl < i) pushup(l >> i); |
| 145 |
12/12void tifa_libs::segbeats_ca_ms<long, __int128>::update_<1>(unsigned int, unsigned int, long):
✓ Branch 0 taken 19615464 times.
✓ Branch 1 taken 873248 times.
void tifa_libs::segbeats_ca_ms<long, __int128>::update_<2>(unsigned int, unsigned int, long):
✓ Branch 0 taken 17093141 times.
✓ Branch 1 taken 570225 times.
void tifa_libs::segbeats_ca_ms<long, __int128>::update_<3>(unsigned int, unsigned int, long):
✓ Branch 0 taken 11579638 times.
✓ Branch 1 taken 496753 times.
void tifa_libs::segbeats_ca_ms<long, long>::update_<1>(unsigned int, unsigned int, long):
✓ Branch 0 taken 15682627 times.
✓ Branch 1 taken 584548 times.
void tifa_libs::segbeats_ca_ms<long, long>::update_<2>(unsigned int, unsigned int, long):
✓ Branch 0 taken 15642910 times.
✓ Branch 1 taken 586497 times.
void tifa_libs::segbeats_ca_ms<long, long>::update_<3>(unsigned int, unsigned int, long):
✓ Branch 0 taken 37753724 times.
✓ Branch 1 taken 1406332 times.
|
121885107 | if (zr < i) pushup((r - 1) >> i); |
| 146 | } | ||
| 147 | } | ||
| 148 | template <int tp> | ||
| 149 | 2698381 | CEXP auto query_(u32 l, u32 r) NE { | |
| 150 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 568140 times.
|
2698381 | if (l == r) return e<tp>(); |
| 151 | 2698381 | l += n, r += n; | |
| 152 | 2698381 | cu32 zl = (u32)std::countr_zero(l), zr = (u32)std::countr_zero(r), ie = (u32)max(1, (i32)min(zl, zr)); | |
| 153 |
2/2✓ Branch 0 taken 9973819 times.
✓ Branch 1 taken 568140 times.
|
52584327 | for (u32 i = lbn; i >= ie; --i) { |
| 154 |
2/2✓ Branch 0 taken 9451727 times.
✓ Branch 1 taken 522092 times.
|
49885946 | if (zl < i) pushdown(l >> i); |
| 155 |
2/2✓ Branch 0 taken 9452247 times.
✓ Branch 1 taken 521572 times.
|
49885946 | if (zr < i) pushdown((r - 1) >> i); |
| 156 | } | ||
| 157 | 2698381 | auto ql = e<tp>(), qr = e<tp>(); | |
| 158 |
2/2✓ Branch 0 taken 8507265 times.
✓ Branch 1 taken 568140 times.
|
37271100 | while (l < r) { |
| 159 |
2/2✓ Branch 0 taken 4379322 times.
✓ Branch 1 taken 4127943 times.
|
34572719 | if (l & 1) op<tp>(ql, v[l++]); |
| 160 |
2/2✓ Branch 0 taken 4231700 times.
✓ Branch 1 taken 4275565 times.
|
34572719 | if (r & 1) op<tp>(qr, v[--r]); |
| 161 | 34572719 | l /= 2, r /= 2; | |
| 162 | } | ||
| 163 | 532742 | if CEXP (tp == 1) return min(ql, qr); | |
| 164 | 530342 | if CEXP (tp == 2) return max(ql, qr); | |
| 165 | 1635297 | if CEXP (tp == 3) return ql + qr; | |
| 166 | } | ||
| 167 | }; | ||
| 168 | |||
| 169 | } // namespace tifa_libs | ||
| 170 |