GCC Code Coverage Report


Directory: ./
Coverage: low: ≥ 0% medium: ≥ 75.0% high: ≥ 90.0%
Coverage Exec / Excl / Total
Lines: 98.6% 290 / 0 / 294
Functions: 100.0% 49 / 0 / 49
Branches: 94.2% 243 / 0 / 258

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/4
tifa_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/4
tifa_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/4
tifa_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/4
tifa_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/4
tifa_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/4
tifa_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/4
tifa_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/4
tifa_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/4
tifa_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/4
tifa_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/8
tifa_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/4
tifa_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/4
tifa_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/4
tifa_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/8
tifa_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/4
tifa_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/4
tifa_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/4
tifa_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/4
tifa_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/4
tifa_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/4
tifa_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/4
tifa_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/4
tifa_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/4
tifa_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/4
tifa_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/4
tifa_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/24
void 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/12
void 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/12
void 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/12
void 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/12
void 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/12
void 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/12
void 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/12
void 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/12
void 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/12
void 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