#include <iostream>
#include<ext/pb_ds/assoc_container.hpp>
#include<ext/pb_ds/tree_policy.hpp>
using namespace std;
using namespace __gnu_pbds;
template <class T>
using indexed_multiset = tree<
T,
null_type,
less<T>,
rb_tree_tag,
tree_order_statistics_node_update
>;
int main() {
indexed_multiset<int> ms;
vector<int> v{1, 1, 2, 2, 3, 4, 5, 6, 6};
for(int i : v) ms.insert(i);
cout << "Ordered Multiset: ";
for(auto x : ms) cout << x << ' '; cout << '\n';
cout << "Lower bound of 2: " << *ms.lower_bound(2) << '\n';
cout << "Upper bound of 2: " << *ms.upper_bound(2) << '\n';
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZTxleHQvcGJfZHMvYXNzb2NfY29udGFpbmVyLmhwcD4KI2luY2x1ZGU8ZXh0L3BiX2RzL3RyZWVfcG9saWN5LmhwcD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnVzaW5nIG5hbWVzcGFjZSBfX2dudV9wYmRzOwp0ZW1wbGF0ZSA8Y2xhc3MgVD4KdXNpbmcgaW5kZXhlZF9tdWx0aXNldCA9IHRyZWU8CiAgICBULAogICAgbnVsbF90eXBlLAogICAgbGVzczxUPiwKICAgIHJiX3RyZWVfdGFnLAogICAgdHJlZV9vcmRlcl9zdGF0aXN0aWNzX25vZGVfdXBkYXRlCj47CgoKaW50IG1haW4oKSB7CglpbmRleGVkX211bHRpc2V0PGludD4gbXM7CiAgICB2ZWN0b3I8aW50PiB2ezEsIDEsIDIsIDIsIDMsIDQsIDUsIDYsIDZ9OwoKICAgIGZvcihpbnQgaSA6IHYpIG1zLmluc2VydChpKTsKCgljb3V0IDw8ICJPcmRlcmVkIE11bHRpc2V0OiAiOwogICAgZm9yKGF1dG8geCA6IG1zKSBjb3V0IDw8IHggPDwgJyAnOyBjb3V0IDw8ICdcbic7CgogICAgY291dCA8PCAiTG93ZXIgYm91bmQgb2YgMjogIiA8PCAqbXMubG93ZXJfYm91bmQoMikgPDwgJ1xuJzsKICAgIGNvdXQgPDwgIlVwcGVyIGJvdW5kIG9mIDI6ICIgPDwgKm1zLnVwcGVyX2JvdW5kKDIpIDw8ICdcbic7CiAgICByZXR1cm4gMDsKfQ==