Skip to content

Commit 48ceeb6

Browse files
Changed the signature of f in max_right & min_left
1 parent 32dbc68 commit 48ceeb6

File tree

2 files changed

+12
-12
lines changed

2 files changed

+12
-12
lines changed

examples/practice2_j_segment_tree.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ fn main() {
2727
3 => {
2828
let x = input.next().unwrap().parse().unwrap();
2929
let v = input.next().unwrap().parse().unwrap();
30-
println!("{}", segtree.max_right(x, |a| a < v))
30+
println!("{}", segtree.max_right(x, |a| a < &v))
3131
}
3232
_ => {}
3333
}

src/segtree.rs

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -136,10 +136,10 @@ impl<M: Monoid> Segtree<M> {
136136

137137
pub fn max_right<F>(&self, mut l: usize, f: F) -> usize
138138
where
139-
F: Fn(M::S) -> bool,
139+
F: Fn(&M::S) -> bool,
140140
{
141141
assert!(l <= self.n);
142-
assert!(f(M::identity()));
142+
assert!(f(&M::identity()));
143143
if l == self.n {
144144
return self.n;
145145
}
@@ -150,11 +150,11 @@ impl<M: Monoid> Segtree<M> {
150150
while l % 2 == 0 {
151151
l >>= 1;
152152
}
153-
if !f(M::binary_operation(&sm, &self.d[l])) {
153+
if !f(&M::binary_operation(&sm, &self.d[l])) {
154154
while l < self.size {
155155
l *= 2;
156156
let res = M::binary_operation(&sm, &self.d[l]);
157-
if f(res.clone()) {
157+
if f(&res) {
158158
sm = res;
159159
l += 1;
160160
}
@@ -174,10 +174,10 @@ impl<M: Monoid> Segtree<M> {
174174

175175
pub fn min_left<F>(&self, mut r: usize, f: F) -> usize
176176
where
177-
F: Fn(M::S) -> bool,
177+
F: Fn(&M::S) -> bool,
178178
{
179179
assert!(r <= self.n);
180-
assert!(f(M::identity()));
180+
assert!(f(&M::identity()));
181181
if r == 0 {
182182
return 0;
183183
}
@@ -189,11 +189,11 @@ impl<M: Monoid> Segtree<M> {
189189
while r > 1 && r % 2 == 1 {
190190
r >>= 1;
191191
}
192-
if !f(M::binary_operation(&self.d[r], &sm)) {
192+
if !f(&M::binary_operation(&self.d[r], &sm)) {
193193
while r < self.size {
194194
r = 2 * r + 1;
195195
let res = M::binary_operation(&self.d[r], &sm);
196-
if f(res.clone()) {
196+
if f(&res) {
197197
sm = res;
198198
r -= 1;
199199
}
@@ -284,12 +284,12 @@ mod tests {
284284
base.iter().max().copied().unwrap_or(i32::min_value())
285285
);
286286
for k in 0..=10 {
287-
let f = |x| x < k;
287+
let f = |&x: &i32| x < k;
288288
for i in 0..=n {
289289
assert_eq!(
290290
Some(segtree.max_right(i, f)),
291291
(i..=n)
292-
.filter(|&j| f(base[i..j]
292+
.filter(|&j| f(&base[i..j]
293293
.iter()
294294
.max()
295295
.copied()
@@ -301,7 +301,7 @@ mod tests {
301301
assert_eq!(
302302
Some(segtree.min_left(j, f)),
303303
(0..=j)
304-
.filter(|&i| f(base[i..j]
304+
.filter(|&i| f(&base[i..j]
305305
.iter()
306306
.max()
307307
.copied()

0 commit comments

Comments
 (0)