茲瓷查rank和kth的STL平衡樹
明天就是一輪省選了啊。。這可能是退役前的最后一篇博文了吧(如果心情不好怕是連游記都會咕)
眾周所知stl中有一個依靠紅黑樹實現的nb數據結構-std::set
但是這玩意兒沒有維護siz域,也就是不能做類似於詢問rank(i)(查詢\(i\)的排名)和kth(i)(查詢排名為\(i\)的數)
但是stl中還有一個更nb的東西-pb_ds
中的平衡樹
定義的話首先要引用
#include<ext/pb_ds/assoc_container.hpp>
#include<ext/pb_ds/tree_policy.hpp>
然后
__gnu_pbds::tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update> s;
就可以啦
可以使用:
s.order_of_key(i)
來得到值為\(i\)的數的排名
*s.find_by_order(i)
來得到排名為\(i\)的數
復雜度比手寫的慢很多,但大概還是log級別,所以考場上如果條件允許的話說不定可以救你一命~