在发布了文章 Treap 学习笔记后我认为我的平衡树能力已经登峰造极了。

但是 Treap 真 tmd 太难写了,所以我们的 czy 大佬开发除了一种可以优雅的踩爆 Treap 的绝佳方案。

#include<bits/stdc++.h>
using namespace std;
int n;
struct tree{
	vector<int> v;
	void add(int x){v.insert(lower_bound(v.begin(),v.end(),x),x);}
	void del(int x){v.erase(lower_bound(v.begin(),v.end(),x));}
	int getrnk(int x){return lower_bound(v.begin(),v.end(),x)-v.begin()+1;}
	int getval(int x){return v[x-1];}
	int getpre(int x){return *(--lower_bound(v.begin(),v.end(),x));}
	int getnxt(int x){return *upper_bound(v.begin(),v.end(),x);}
}tr;
int main(){
	cin>>n;
	for(int i=1,op,x;i<=n;i++){
		cin>>op>>x;
		if(op==1) tr.add(x);
		if(op==2) tr.del(x);
		if(op==3) cout<<tr.getrnk(x)<<endl;
		if(op==4) cout<<tr.getval(x)<<endl;
		if(op==5) cout<<tr.getpre(x)<<endl;
		if(op==6) cout<<tr.getnxt(x)<<endl;
	}
	return 0;
}