怎么优雅的踩爆 Treap
在发布了文章 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;
}