22#define PROBLEM " https://judge.yosupo.jp/problem/ordered_set"
33#pragma GCC optimize("Ofast,unroll-loops")
44#include " cp-algo/structures/fenwick_set.hpp"
5+ #include " cp-algo/util/compress_coords.hpp"
56#include < bits/stdc++.h>
67
78using namespace std ;
89using cp_algo::structures::fenwick_set;
910
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-
2511void solve () {
2612 int n, q;
2713 cin >> n >> q;
@@ -38,7 +24,7 @@ void solve() {
3824 coords.push_back (&x);
3925 }
4026 }
41- auto nums = compress (coords);
27+ auto values = cp_algo::compress_coords (coords);
4228 const int maxc = 1e6 ;
4329 fenwick_set<maxc> me (a);
4430 for (auto [t, x]: queries) {
@@ -48,15 +34,15 @@ void solve() {
4834 me.erase (x);
4935 } else if (t == 2 ) {
5036 int res = me.find_by_order (x-1 );
51- cout << (res == -1 ? -1 : nums [res]) << ' \n ' ;
37+ cout << (res == -1 ? -1 : values [res]) << ' \n ' ;
5238 } else if (t == 3 ) {
5339 cout << me.order_of_key (x+1 ) << ' \n ' ;
5440 } else if (t == 4 ) {
5541 int res = me.pre_upper_bound (x);
56- cout << (res == -1 ? -1 : nums [res]) << ' \n ' ;
42+ cout << (res == -1 ? -1 : values [res]) << ' \n ' ;
5743 } else if (t == 5 ) {
5844 int res = me.lower_bound (x);
59- cout << (res == -1 ? -1 : nums [res]) << ' \n ' ;
45+ cout << (res == -1 ? -1 : values [res]) << ' \n ' ;
6046 }
6147 }
6248}
0 commit comments