【福利】白嫖平衡树|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 树),堆(优先队列)等。

posted @ 2022-01-26 15:26  蒟蒻xiezheyuan  阅读(69)  评论(0编辑  收藏  举报