std::set is a powerful data structure: it allows to do insertions/deletions pretty fast, while also being able to access the smallest/biggest element. On top of that, you can also find the smallest element in the set which is greater than some $$$x$$$. If you can use it properly, it is already enough to solve some of the 1800-2000 rated problems.
On the other hand, what could ordered_set possibly offer? It can do 2 things (other than std::set):
st.find_by_order(x)— returns the iterator of the $$$x$$$-th smallest elementst.order_of_key(x)— returns the number of elements less than $$$x$$$ (i.e. index of the smallest element $$$\ge x$$$)
One of the basic applications of ordered_set would be counting the number of inversions of an arbitrary permutation.
For comparison:
Ordered set way
ordered_set<int> st;
int ans = 0;
for (int i = n - 1; i >= 0; i--)
ans += st.order_of_key(p[i]), st.insert(p[i]);
Merge sort way
// too long to fit in 65536 characters
"There's not much you can do with this, other than count inversions", you might foolishly say, without having solved 2400-2500 rated problems using just ordered_set. Let's take 2064E - Mycraft Sand Sort as an example. In the editorial it says "blah blah blah, use dsu and segtree". But little does the foolish author of this problem know, is the existence of ordered_set (Intellegent is actually noob). As you can see in 306417199, it can easily be solved using 2 ordered_sets. Why use 2 different data structures when you can use a single one twice? Another example would be 2059E1 - Stop Gaming (Easy Version), which is also intended to have a long-implemented solution, yet still solvable using just the ordered_set, which will end up being a lot shorter than the intended code. There are a lot more problems than these which could be solved using ordered_set, it's just that I couldn't find worthy candidates for this blog(maybe you can help).
Another funny (but not really useful) application, is handling point update and range sum queries in $$$O(log\ n\ log\ A)$$$(where $$$A$$$ is the max element). It can be done by creating $$$log\ A$$$ ordered sets, and inserting each bit of the element being added to the corresponding ordered set. To get a sum in $$$[l, r]$$$, we can just count the number of elements between $$$l$$$ and $$$r$$$ for each bit, and sum everything up.









What the hell Intellegent slander will not be tolerated
You can actually solve Mycraft Sand Sort with just a normal set: 306419534
set + dsu 306435940
Sparse seg tree: Hi
I dont like ordered set because it is much slower than compression + normal segtree
personally i consider
ordered_seta crutch, but i do understand why people use itthere is a way to replicate
ordered_set's.find_by_order()and.order_of_key()(and possibly even iterator increment/decrement too, but i haven't tried) with the same complexity (and less constant) using coordinate compression and a fenwick tree, and i prefer understanding and getting to interact with what im working with rather than using some weird library dsalso you can solve 2064E - Mycraft Sand Sort with only DSU in $$$O(n\alpha(n))$$$ 359696669
You mean to say "imagine not using PBDS". You just gave your own, somewhat misleading (set is already ordered, just not random-access) name to a particular PBDS template class.
sqrt decomposition gaming: hi
:(
a bad square
Bruh, What did Intellegent do to you? You are so agressive!
I do not know why your blog reads so aggressive. What's more, you may not know there is a C++ version of
SortedList(which is largely used in Python), and it is more efficient than PBDS.Intellegent slander in big 2026 :(