cpp_logn_tree
#include <ext/pb_ds/assoc_container.hpp> // Core templates
#include <ext/pb_ds/tree_policy.hpp> // Tree update policies
template <typename T>
using ordered_set = __gnu_pbds::tree<
T,
__gnu_pbds::null_type,
std::less<>,
__gnu_pbds::rb_tree_tag,
__gnu_pbds::tree_order_statistics_node_update
>;
ordered_set<std::pair<int, int>> o; // define tree
auto it = o.find_by_order(k - 1); // get kth smallest element;
o.erase(it); // erase element
o.insert(...); // insert element
os.order_of_key(x); // get how many elements are less than x
o.lower_bound(x);
o.upper_bound(x);
o.size();
o.empty();
o.clear();
o.find(x); // find node, o.end() if not found