Skip to content

Commit 01a21fe

Browse files
committed
fix
1 parent 9435592 commit 01a21fe

5 files changed

Lines changed: 18 additions & 22 deletions

File tree

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

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,14 @@
55
//! return vl + vr;
66
//! });
77
//! tree st(a, ranges::min);
8-
//! int idx = st.max_right(l, r, [&](int value) {
8+
//! st.max_right(l, r, [&](int m, int value) {
9+
//! // value = op(a[l], a[l+1], ..., a[m])
910
//! return value <= x;
1011
//! });
11-
//! // idx in [l, r+1]
12-
//! // f(op(a[l], a[l+1], ..., a[idx-1])) is true
13-
//! // f(op(a[l], a[l+1], ..., a[idx])) is false
14-
//! idx = st.min_left(l, r, [&](int value) {
12+
//! st.min_left(l, r, [&](int m, int value) {
13+
//! // value = op(a[m], ..., a[r-1], a[r])
1514
//! return value <= x;
1615
//! });
17-
//! // idx in [l-1, r]
18-
//! // f(op(a[idx+1], ..., a[r-1], a[r])) is true
19-
//! // f(op(a[idx], ..., a[r-1], a[r])) is false
2016
//! @endcode
2117
//! @time O(n + q log n)
2218
//! @space O(n)

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
void max_right(int l, int r, const auto& f) {
2-
if (T x = s[l + n]; f(x, l))
2+
if (T x = s[l + n]; f(l, x))
33
for (l++; l <= r;) {
44
int u = l + n, v = __lg(min(u & -u, r - l + 1)),
55
m = l + (1 << v) - 1;
6-
if (T y = op(x, s[u >> v]); f(y, m))
6+
if (T y = op(x, s[u >> v]); f(m, y))
77
l = m + 1, x = y;
88
else r = m - 1;
99
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
int min_left(int l, int r, const auto& f) {
2-
if (T x = s[r + n]; f(x, r))
2+
if (T x = s[r + n]; f(r, x))
33
for (r--; l <= r;) {
44
int u = r + 1 + n, v = __lg(min(u & -u, r - l + 1)),
55
m = r - (1 << v) + 1;
6-
if (T y = op(s[(u - 1) >> v], x); f(y, m))
6+
if (T y = op(s[(u - 1) >> v], x); f(m, y))
77
r = m - 1, x = y;
88
else l = m + 1;
99
}

tests/library_checker_aizu_tests/data_structures/simple_tree_inc_line.test.cpp

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,8 @@ int main() {
3232
array<int, 2> walk_res = {1, 0};
3333
int idx = -1;
3434
st.max_right(l, r,
35-
[&](const array<int, 2>& curr_line,
36-
int m) -> bool {
35+
[&](int m,
36+
const array<int, 2>& curr_line) -> bool {
3737
idx = m;
3838
walk_res = curr_line;
3939
return 1;
@@ -45,8 +45,8 @@ int main() {
4545
array<int, 2> walk_res = unit;
4646
int idx = -1;
4747
st.max_right(l, r,
48-
[&](const array<int, 2>& curr_line,
49-
int m) -> bool {
48+
[&](int m,
49+
const array<int, 2>& curr_line) -> bool {
5050
walk_res = curr_line;
5151
idx = m;
5252
return 0;
@@ -58,8 +58,8 @@ int main() {
5858
array<int, 2> walk_res = unit;
5959
int idx = -1;
6060
st.min_left(l, r,
61-
[&](const array<int, 2>& curr_line,
62-
int m) -> bool {
61+
[&](int m,
62+
const array<int, 2>& curr_line) -> bool {
6363
walk_res = curr_line;
6464
idx = m;
6565
return 1;
@@ -71,8 +71,8 @@ int main() {
7171
array<int, 2> walk_res = unit;
7272
int idx = -1;
7373
st.min_left(l, r,
74-
[&](const array<int, 2>& curr_line,
75-
int m) -> bool {
74+
[&](int m,
75+
const array<int, 2>& curr_line) -> bool {
7676
walk_res = curr_line;
7777
idx = m;
7878
return 0;

tests/library_checker_aizu_tests/data_structures/simple_tree_inc_walk.test.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ int main() {
2323
} else if (type == 3) {
2424
// returns first element in [k,n-1] such that mx > 0
2525
int idx = -1;
26-
st.max_right(k, n - 1, [&](int mx, int m) {
26+
st.max_right(k, n - 1, [&](int m, int mx) {
2727
if (mx == 0) return 1;
2828
idx = m;
2929
return 0;
@@ -32,7 +32,7 @@ int main() {
3232
} else {
3333
assert(type == 4);
3434
int idx = -1;
35-
cout << st.min_left(0, k, [&](int mx, int m) {
35+
cout << st.min_left(0, k, [&](int m, int mx) {
3636
if (mx == 0) return 1;
3737
idx = m;
3838
return 0;

0 commit comments

Comments
 (0)