Skip to content

Commit 65e3ff7

Browse files
author
Cameron Custer
committed
use ranges/views and <bit> consistently: offset ranges via views::drop/take, __lg -> bit_width/bit_floor
1 parent 6e3bb1c commit 65e3ff7

18 files changed

Lines changed: 39 additions & 29 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 = __lg(r - l);
26+
int lg = bit_width(r - l + 0u) - 1;
2727
return op(dp[lg][l], dp[lg][r - (1 << lg)]);
2828
}
2929
};
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#pragma once
22
//! https://codeforces.com/blog/entry/112755
33
int split(int tl, int tr) {
4-
int pw2 = 1 << __lg(tr - tl);
4+
int pw2 = bit_floor(tr - tl + 0u);
55
return min(tl + pw2, tr - pw2 / 2);
66
}

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

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

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
void min_left(int l, int r, auto f) {
22
for (T x = unit; l < r;) {
3-
int u = r + n, v = __lg(min(u & -u, r - l)),
3+
int u = r + n,
4+
v = bit_width(min(u & -u, r - l) + 0u) - 1,
45
m = r - (1 << v);
56
if (T y = op(s[(u - 1) >> v], x); f(m, y))
67
r = m, x = y;

library/data_structures_[l,r)/uncommon/deque_op.hpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -58,9 +58,10 @@ template<class T, class F> struct deq {
5858
partial_sum(sz_le + all(a), begin(presum) + sz_le, op);
5959
l.resize(sz_le);
6060
r.resize(sz(a) - sz_le);
61-
transform(begin(a), begin(a) + sz_le, begin(presum),
61+
ranges::transform(a | views::take(sz_le), presum,
6262
rbegin(l), [](T x, T y) { return dt{x, y}; });
63-
transform(sz_le + all(a), begin(presum) + sz_le,
64-
begin(r), [](T x, T y) { return dt{x, y}; });
63+
ranges::transform(a | views::drop(sz_le),
64+
presum | views::drop(sz_le), begin(r),
65+
[](T x, T y) { return dt{x, y}; });
6566
}
6667
};

library/data_structures_[l,r)/uncommon/priority_queue_of_updates.hpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,10 @@ template<class DS, class... ARGS> struct pq_updates {
3838
extra.push_back(upd_st[idx_sk]);
3939
idx = min(idx, idx_sk), lowest_pri = pri;
4040
}
41-
auto it = remove_if(idx + all(upd_st), [&](auto& cur) {
42-
return cur.second->first >= lowest_pri;
43-
});
41+
auto it = begin(ranges::remove_if(
42+
upd_st | views::drop(idx), [&](auto& cur) {
43+
return cur.second->first >= lowest_pri;
44+
}));
4445
ranges::reverse_copy(extra, it);
4546
rep(i, idx, sz(upd_st)) ds.undo();
4647
upd_st.pop_back();

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 = __lg(l ^ r);
30+
int lg = bit_width((l ^ r) + 0u) - 1;
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 = __lg(r - l + 1);
26+
int lg = bit_width(r - l + 1u) - 1;
2727
return op(dp[lg][l], dp[lg][r - (1 << lg) + 1]);
2828
}
2929
};

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@
1717
//! @time O(n + q log n)
1818
//! @space O(n)
1919
int nxt(int& l, int r) {
20-
int u = l, v = __lg(min(l & -l, r - l + 1));
20+
int u = l,
21+
v = bit_width(min(l & -l, r - l + 1) + 0u) - 1;
2122
return l += 1 << v, u >> v;
2223
}
2324
template<class T, class F> struct tree {

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
void max_right(int l, int r, auto f) {
22
if (T x = s[l + n]; f(l, x))
33
for (l++; l <= r;) {
4-
int u = l + n, v = __lg(min(u & -u, r - l + 1)),
4+
int u = l + n,
5+
v = bit_width(min(u & -u, r - l + 1) + 0u) - 1,
56
m = l + (1 << v) - 1;
67
if (T y = op(x, s[u >> v]); f(m, y))
78
l = m + 1, x = y;

0 commit comments

Comments
 (0)