#include <iostream>
#include <ext/pb_ds/tree_policy.hpp>
#include <ext/pb_ds/assoc_container.hpp>
using namespace std;
using namespace __gnu_pbds;
// Define ordered set (sorted in ascending order)
typedef tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update> ordered_set;
// Function to erase an element from the ordered set
void Erase(ordered_set& s, int val) {
auto it = s.find(val);
if (it != s.end()) {
s.erase(it);
}
}
int main() {
ordered_set s;
// Insert elements
s.insert(10);
s.insert(20);
s.insert(30);
s.insert(40);
s.insert(50);
// Print elements
cout << "Elements in ordered set: ";
for (auto x : s) {
cout << x << " ";
}
cout << "\n";
// Find the k-th smallest element (0-based index)
int k = 2;
cout << "The " << k << "-th smallest element: " << *s.find_by_order(k) << endl;
// Get the number of elements smaller than 25
cout << "Number of elements smaller than 25: " << s.order_of_key(25) << endl;
// Erase an element
Erase(s, 30);
cout << "After erasing 30: ";
for (auto x : s) {
cout << x << " ";
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8ZXh0L3BiX2RzL3RyZWVfcG9saWN5LmhwcD4KI2luY2x1ZGUgPGV4dC9wYl9kcy9hc3NvY19jb250YWluZXIuaHBwPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKdXNpbmcgbmFtZXNwYWNlIF9fZ251X3BiZHM7CgovLyBEZWZpbmUgb3JkZXJlZCBzZXQgKHNvcnRlZCBpbiBhc2NlbmRpbmcgb3JkZXIpCnR5cGVkZWYgdHJlZTxpbnQsIG51bGxfdHlwZSwgbGVzczxpbnQ+LCByYl90cmVlX3RhZywgdHJlZV9vcmRlcl9zdGF0aXN0aWNzX25vZGVfdXBkYXRlPiBvcmRlcmVkX3NldDsKCi8vIEZ1bmN0aW9uIHRvIGVyYXNlIGFuIGVsZW1lbnQgZnJvbSB0aGUgb3JkZXJlZCBzZXQKdm9pZCBFcmFzZShvcmRlcmVkX3NldCYgcywgaW50IHZhbCkgewogICAgYXV0byBpdCA9IHMuZmluZCh2YWwpOwogICAgaWYgKGl0ICE9IHMuZW5kKCkpIHsKICAgICAgICBzLmVyYXNlKGl0KTsKICAgIH0KfQoKaW50IG1haW4oKSB7CiAgICBvcmRlcmVkX3NldCBzOwoKICAgIC8vIEluc2VydCBlbGVtZW50cwogICAgcy5pbnNlcnQoMTApOwogICAgcy5pbnNlcnQoMjApOwogICAgcy5pbnNlcnQoMzApOwogICAgcy5pbnNlcnQoNDApOwogICAgcy5pbnNlcnQoNTApOwoKICAgIC8vIFByaW50IGVsZW1lbnRzCiAgICBjb3V0IDw8ICJFbGVtZW50cyBpbiBvcmRlcmVkIHNldDogIjsKICAgIGZvciAoYXV0byB4IDogcykgewogICAgICAgIGNvdXQgPDwgeCA8PCAiICI7CiAgICB9CiAgICBjb3V0IDw8ICJcbiI7CgogICAgLy8gRmluZCB0aGUgay10aCBzbWFsbGVzdCBlbGVtZW50ICgwLWJhc2VkIGluZGV4KQogICAgaW50IGsgPSAyOwogICAgY291dCA8PCAiVGhlICIgPDwgayA8PCAiLXRoIHNtYWxsZXN0IGVsZW1lbnQ6ICIgPDwgKnMuZmluZF9ieV9vcmRlcihrKSA8PCBlbmRsOwoKICAgIC8vIEdldCB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIHNtYWxsZXIgdGhhbiAyNQogICAgY291dCA8PCAiTnVtYmVyIG9mIGVsZW1lbnRzIHNtYWxsZXIgdGhhbiAyNTogIiA8PCBzLm9yZGVyX29mX2tleSgyNSkgPDwgZW5kbDsKCiAgICAvLyBFcmFzZSBhbiBlbGVtZW50CiAgICBFcmFzZShzLCAzMCk7CiAgICBjb3V0IDw8ICJBZnRlciBlcmFzaW5nIDMwOiAiOwogICAgZm9yIChhdXRvIHggOiBzKSB7CiAgICAgICAgY291dCA8PCB4IDw8ICIgIjsKICAgIH0KCiAgICByZXR1cm4gMDsKfQo=