File tree Expand file tree Collapse file tree 6 files changed +14
-9
lines changed
Expand file tree Collapse file tree 6 files changed +14
-9
lines changed Original file line number Diff line number Diff line change @@ -206,11 +206,11 @@ path = "examples/helpers/lis_handmade.rs"
206206
207207[[example ]]
208208name = " range_container_aizu"
209- path = " examples/helpers /range_container_aizu.rs"
209+ path = " examples/data_structures /range_container_aizu.rs"
210210
211211[[example ]]
212212name = " range_container_handmade"
213- path = " examples/helpers /range_container_handmade.rs"
213+ path = " examples/data_structures /range_container_handmade.rs"
214214
215215[[example ]]
216216name = " mono_st"
Original file line number Diff line number Diff line change 11// verification-helper: PROBLEM https://onlinejudge.u-aizu.ac.jp/problems/DSL_2_D
22
33use proconio:: input;
4- use programming_team_code_rust:: helpers :: range_container:: RangeContainer ;
4+ use programming_team_code_rust:: data_structures :: range_container:: RangeContainer ;
55
66fn main ( ) {
77 input ! {
Original file line number Diff line number Diff line change 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 ;
44use rand:: { thread_rng, Rng } ;
55use 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 ) ;
Original file line number Diff line number Diff line change @@ -3,6 +3,7 @@ pub mod binary_trie;
33pub mod disjoint_rmq;
44pub mod fenwick;
55pub mod lazy_seg_tree;
6+ pub mod range_container;
67pub mod rmq;
78pub mod seg_tree;
89pub mod trie;
Original file line number Diff line number Diff 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) ;
Original file line number Diff line number Diff line change 11//! # Helpers
22pub mod compress;
33pub mod lis;
4- pub mod range_container;
54pub mod unsafe_recursive_closure;
You can’t perform that action at this time.
0 commit comments