Skip to content

Commit f3ca0f5

Browse files
authored
handle empty ranges (#98)
* panic on empty * fix * move to data structures * fix * update test * now ACs --------- Co-authored-by: Luke Videckis <lukevideckis@gmail.com>
1 parent 9680b5c commit f3ca0f5

File tree

6 files changed

+14
-9
lines changed

6 files changed

+14
-9
lines changed

Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -206,11 +206,11 @@ path = "examples/helpers/lis_handmade.rs"
206206

207207
[[example]]
208208
name = "range_container_aizu"
209-
path = "examples/helpers/range_container_aizu.rs"
209+
path = "examples/data_structures/range_container_aizu.rs"
210210

211211
[[example]]
212212
name = "range_container_handmade"
213-
path = "examples/helpers/range_container_handmade.rs"
213+
path = "examples/data_structures/range_container_handmade.rs"
214214

215215
[[example]]
216216
name = "mono_st"

examples/helpers/range_container_aizu.rs renamed to examples/data_structures/range_container_aizu.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// verification-helper: PROBLEM https://onlinejudge.u-aizu.ac.jp/problems/DSL_2_D
22

33
use proconio::input;
4-
use programming_team_code_rust::helpers::range_container::RangeContainer;
4+
use programming_team_code_rust::data_structures::range_container::RangeContainer;
55

66
fn main() {
77
input! {

examples/helpers/range_container_handmade.rs renamed to examples/data_structures/range_container_handmade.rs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
// verification-helper: PROBLEM https://onlinejudge.u-aizu.ac.jp/courses/lesson/2/ITP1/all/ITP1_1_A
22

3-
use programming_team_code_rust::helpers::range_container::RangeContainer;
3+
use programming_team_code_rust::data_structures::range_container::RangeContainer;
44
use rand::{thread_rng, Rng};
55
use std::collections::BTreeMap;
66

@@ -11,12 +11,11 @@ fn main() {
1111
let mut vis = vec![false; max_n + 1];
1212
let mut rc = RangeContainer::default();
1313
for _ in 0..100 {
14-
let mut le = rng.gen_range(0..max_n);
15-
let mut ri = rng.gen_range(0..max_n);
14+
let mut le = rng.gen_range(0..=max_n);
15+
let mut ri = rng.gen_range(0..=max_n);
1616
if le > ri {
1717
(le, ri) = (ri, le);
1818
}
19-
ri += 1;
2019
match rng.gen_range(0..2) {
2120
0 => {
2221
rc.insert_range(le as i32..ri as i32);

src/data_structures/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ pub mod binary_trie;
33
pub mod disjoint_rmq;
44
pub mod fenwick;
55
pub mod lazy_seg_tree;
6+
pub mod range_container;
67
pub mod rmq;
78
pub mod seg_tree;
89
pub mod trie;

src/helpers/range_container.rs renamed to src/data_structures/range_container.rs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use std::ops::Range;
55

66
/// # Example
77
/// ```
8-
/// use programming_team_code_rust::helpers::range_container::RangeContainer;
8+
/// use programming_team_code_rust::data_structures::range_container::RangeContainer;
99
///
1010
/// let mut rc = RangeContainer::default();
1111
/// rc.insert_range(-2..2);
@@ -45,6 +45,9 @@ impl<T: Copy + Ord> RangeContainer<T> {
4545
/// - Time: O(log n) ammortized
4646
/// - Space: O(1) ammortized
4747
pub fn insert_range(&mut self, mut range: Range<T>) {
48+
if range.is_empty() {
49+
return;
50+
}
4851
if let Some(last_ri) = self.remove(&range) {
4952
range.end = std::cmp::max(range.end, last_ri);
5053
}
@@ -63,6 +66,9 @@ impl<T: Copy + Ord> RangeContainer<T> {
6366
/// - Time: O(log n) ammortized
6467
/// - Space: O(1) ammortized
6568
pub fn remove_range(&mut self, range: Range<T>) {
69+
if range.is_empty() {
70+
return;
71+
}
6672
if let Some(last_ri) = self.remove(&range) {
6773
if range.end < last_ri {
6874
self.mp.insert(range.end, last_ri);

src/helpers/mod.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
//! # Helpers
22
pub mod compress;
33
pub mod lis;
4-
pub mod range_container;
54
pub mod unsafe_recursive_closure;

0 commit comments

Comments
 (0)