Skip to content

Commit ee83f5e

Browse files
committed
change bit_width(x + 0u) - 1 to bit_width(x / 2u)
1 parent 5eb85c7 commit ee83f5e

11 files changed

Lines changed: 12 additions & 15 deletions

File tree

library/data_structures_[l,r)/rmq.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ template<class T, class F> struct RMQ {
2323
}
2424
T query(int l, int r) {
2525
assert(l < r);
26-
int lg = bit_width(r - l + 0u) - 1;
26+
int lg = bit_width((r - l) / 2u);
2727
return op(dp[lg][l], dp[lg][r - (1 << lg)]);
2828
}
2929
};

library/data_structures_[l,r)/seg_tree_uncommon/max_right.hpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
int max_right(int l, int r, auto f) {
22
for (T x = unit; l < r;) {
3-
int u = l + n,
4-
v = bit_width(min(u & -u, r - l) + 0u) - 1,
3+
int u = l + n, v = bit_width(min(u & -u, r - l) / 2u),
54
m = l + (1 << v);
65
if (T y = op(x, s[u >> v]); f(m, y)) l = m, x = y;
76
else r = m - 1;

library/data_structures_[l,r)/seg_tree_uncommon/min_left.hpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
int min_left(int l, int r, auto f) {
22
for (T x = unit; l < r;) {
3-
int u = r + n,
4-
v = bit_width(min(u & -u, r - l) + 0u) - 1,
3+
int u = r + n, v = bit_width(min(u & -u, r - l) / 2u),
54
m = r - (1 << v);
65
if (T y = op(s[(u - 1) >> v], x); f(m, y))
76
r = m, x = y;

library/data_structures_[l,r]/disjoint_rmq.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ template<class T, class F> struct disjoint_rmq {
2727
}
2828
T query(int l, int r) {
2929
if (l == r) return dp[0][l];
30-
int lg = bit_width((l ^ r) + 0u) - 1;
30+
int lg = bit_width((l ^ r) / 2u);
3131
return op(dp[lg][l], dp[lg][r]);
3232
}
3333
};

library/data_structures_[l,r]/rmq.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ template<class T, class F> struct RMQ {
2323
}
2424
T query(int l, int r) {
2525
assert(l <= r);
26-
int lg = bit_width(r - l + 1u) - 1;
26+
int lg = bit_width((r - l + 1) / 2u);
2727
return op(dp[lg][l], dp[lg][r - (1 << lg) + 1]);
2828
}
2929
};

library/data_structures_[l,r]/seg_tree.hpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,7 @@
1919
//! @time O(n + q log n)
2020
//! @space O(n)
2121
int nxt(int& l, int r) {
22-
int u = l,
23-
v = bit_width(min(l & -l, r - l + 1) + 0u) - 1;
22+
int u = l, v = bit_width(min(l & -l, r - l + 1) / 2u);
2423
return l += 1 << v, u >> v;
2524
}
2625
template<class T, class F> struct tree {

library/data_structures_[l,r]/seg_tree_uncommon/max_right.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ int max_right(int l, int r, auto f) {
22
if (T x = s[l + n]; f(l, x))
33
for (l++; l <= r;) {
44
int u = l + n,
5-
v = bit_width(min(u & -u, r - l + 1) + 0u) - 1,
5+
v = bit_width(min(u & -u, r - l + 1) / 2u),
66
m = l + (1 << v) - 1;
77
if (T y = op(x, s[u >> v]); f(m, y))
88
l = m + 1, x = y;

library/data_structures_[l,r]/seg_tree_uncommon/min_left.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ int min_left(int l, int r, auto f) {
22
if (T x = s[r + n]; f(r, x))
33
for (r--; l <= r;) {
44
int u = r + 1 + n,
5-
v = bit_width(min(u & -u, r - l + 1) + 0u) - 1,
5+
v = bit_width(min(u & -u, r - l + 1) / 2u),
66
m = r - (1 << v) + 1;
77
if (T y = op(s[(u - 1) >> v], x); f(m, y))
88
r = m - 1, x = y;

library/dsu/range_parallel_dsu.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ struct rp_dsu {
99
vector<DSU> dsus;
1010
rp_dsu(int n): dsus(bit_width(n + 0u), DSU(n)) {}
1111
void join(int u, int v, int len, auto f) {
12-
int i = bit_width(len + 0u) - 1;
12+
int i = bit_width(len / 2u);
1313
join(u, v, f, i);
1414
join(u + len - (1 << i), v + len - (1 << i), f, i);
1515
}

library/trees/uncommon/ladder_decomposition.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ struct ladder {
4545
int kth_par(int u, int k) {
4646
assert(0 <= k && k <= d[u]);
4747
if (k == 0) return u;
48-
int bit = bit_width(k + 0u) - 1;
48+
int bit = bit_width(k / 2u);
4949
u = jmp[bit][u], k -= (1 << bit);
5050
int i = idx[u], j = i + d[lad[i]] - d[u];
5151
assert(lad[j] == u);

0 commit comments

Comments
 (0)