1
1
#include < gtest/gtest.h>
2
2
3
+ #include < cstddef>
3
4
#include < mrpython/typical_segment_tree.hpp>
4
- #include < numeric>
5
5
#include < random>
6
6
7
7
TEST (typical_segment_tree, min) {
@@ -30,14 +30,14 @@ TEST(typical_segment_tree, min) {
30
30
}
31
31
}
32
32
33
- TEST (typicaL_segment_tree, fist_first_right ) {
33
+ TEST (typicaL_segment_tree, find_first_right ) {
34
34
std::mt19937_64 gen (std::random_device{}());
35
35
std::size_t n = std::uniform_int_distribution<std::size_t >{1 , 5000 }(gen),
36
36
q = std::uniform_int_distribution<std::size_t >{1 , 5000 }(gen);
37
37
std::vector<int > a (n);
38
38
std::uniform_int_distribution<int > val_dist (std::numeric_limits<int >::min (),
39
39
std::numeric_limits<int >::max ());
40
- std::uniform_int_distribution<std::size_t > size_dist (0 , n - 1 ),
40
+ std::uniform_int_distribution<std::size_t > size_dist (0 , n),
41
41
operator_dist (0 , 1 );
42
42
std::generate (a.begin (), a.end (), [&] { return val_dist (gen); });
43
43
mrpython::typical_segment_tree_min<int > tree (a.begin (), a.end ());
@@ -49,3 +49,24 @@ TEST(typicaL_segment_tree, fist_first_right) {
49
49
EXPECT_EQ (tree.find_first_right (l, check), ans);
50
50
}
51
51
}
52
+
53
+ TEST (typicaL_segment_tree, find_last_left) {
54
+ std::mt19937_64 gen (std::random_device{}());
55
+ std::size_t n = std::uniform_int_distribution<std::size_t >{1 , 5000 }(gen),
56
+ q = std::uniform_int_distribution<std::size_t >{1 , 5000 }(gen);
57
+ std::vector<int > a (n);
58
+ std::uniform_int_distribution<int > val_dist (std::numeric_limits<int >::min (),
59
+ std::numeric_limits<int >::max ());
60
+ std::uniform_int_distribution<std::size_t > size_dist (0 , n),
61
+ operator_dist (0 , 1 );
62
+ std::generate (a.begin (), a.end (), [&] { return val_dist (gen); });
63
+ mrpython::typical_segment_tree_min<int > tree (a.begin (), a.end ());
64
+ while (q--) {
65
+ std::size_t l = size_dist (gen) - 1 ;
66
+ int tv = val_dist (gen);
67
+ auto check = [tv](int x) { return x <= tv; };
68
+ size_t ans = a.rend () - std::find_if (a.rend () - l - 1 , a.rend (), check) - 1 ;
69
+ size_t out = tree.find_last_left (l, check);
70
+ EXPECT_EQ (out, ans);
71
+ }
72
+ }
0 commit comments