【福利】白嫖平衡树|P3369 【模板】普通平衡树
很多题目都需要用到平衡树,但是本蒟蒻什么Splay
、替罪羊
、红黑树
之类都不会打。最终发现,万能的STL有!
比如说P3369 【模板】普通平衡树,就可以用pb_ds
。(注:红黑树rb_tree_tag
比Splaysplay_tree_tag
快很多!)
#include<bits/stdc++.h>
#include<ext/pb_ds/tree_policy.hpp>
#include<ext/pb_ds/assoc_container.hpp>
#define int long long
using namespace __gnu_pbds;
using namespace std;
tree<int,null_type,std::less<int>,rb_tree_tag,tree_order_statistics_node_update>splay;
int n,ans;
signed main(){
scanf("%lld",&n);
for(int i=1;i<=n;i++){
int opt,x;
scanf("%lld%lld",&opt,&x);
switch(opt){
case 1:
splay.insert((x<<20)+i);
break;
case 2:
splay.erase(splay.lower_bound(x<<20));
break;
case 3:
printf("%lld\n",splay.order_of_key(x<<20)+1);
break;
case 4:
ans=*splay.find_by_order(x-1);
printf("%lld\n",ans>>20);
break;
case 5:
ans=*--splay.lower_bound(x<<20);
printf("%lld\n",ans>>20);
break;
case 6:
ans=*splay.lower_bound((x+1)<<20);printf("%lld\n",ans>>20);
break;
}
}
return 0;
}
具体详见OI Wiki,不只有平衡树,还有哈希(Hash)表,字典树(Trie 树),堆(优先队列)等。