2
2
#define PROBLEM " https://judge.yosupo.jp/problem/ordered_set"
3
3
#pragma GCC optimize("Ofast,unroll-loops")
4
4
#include " cp-algo/structures/fenwick_set.hpp"
5
+ #include " cp-algo/util/compress_coords.hpp"
5
6
#include < bits/stdc++.h>
6
7
7
8
using namespace std ;
8
9
using cp_algo::structures::fenwick_set;
9
10
10
- vector<int > compress (vector<int *> a) {
11
- vector<int > nums;
12
- ranges::sort (a, {}, [](int * x) {return *x;});
13
- int idx = -1 , prev = -1 ;
14
- for (auto x: a) {
15
- if (*x != prev) {
16
- idx++;
17
- prev = *x;
18
- nums.push_back (*x);
19
- }
20
- *x = idx;
21
- }
22
- return nums;
23
- }
24
-
25
11
void solve () {
26
12
int n, q;
27
13
cin >> n >> q;
@@ -38,7 +24,7 @@ void solve() {
38
24
coords.push_back (&x);
39
25
}
40
26
}
41
- auto nums = compress (coords);
27
+ auto values = cp_algo::compress_coords (coords);
42
28
const int maxc = 1e6 ;
43
29
fenwick_set<maxc> me (a);
44
30
for (auto [t, x]: queries) {
@@ -48,15 +34,15 @@ void solve() {
48
34
me.erase (x);
49
35
} else if (t == 2 ) {
50
36
int res = me.find_by_order (x-1 );
51
- cout << (res == -1 ? -1 : nums [res]) << ' \n ' ;
37
+ cout << (res == -1 ? -1 : values [res]) << ' \n ' ;
52
38
} else if (t == 3 ) {
53
39
cout << me.order_of_key (x+1 ) << ' \n ' ;
54
40
} else if (t == 4 ) {
55
41
int res = me.pre_upper_bound (x);
56
- cout << (res == -1 ? -1 : nums [res]) << ' \n ' ;
42
+ cout << (res == -1 ? -1 : values [res]) << ' \n ' ;
57
43
} else if (t == 5 ) {
58
44
int res = me.lower_bound (x);
59
- cout << (res == -1 ? -1 : nums [res]) << ' \n ' ;
45
+ cout << (res == -1 ? -1 : values [res]) << ' \n ' ;
60
46
}
61
47
}
62
48
}
0 commit comments