#include <bits/stdc++.h>
#define lb std::lower_bound
#define ub std::upper_bound
#define I __inline__ __attribute__((always_inline))
class BalancedTree {
private:
std::vector<int> v;
public:
explicit BalancedTree(int size);
~BalancedTree() {}
I void insert(int k);
I void erase(int k);
I int rank(int k);
I int kth(int k);
I int pre(int k);
I int post(int k);
};
BalancedTree::BalancedTree(int size) {
v.resize(size);
}
I void BalancedTree::insert(int k) {
v.insert(lb(v.begin(),v.end(),k),k);
}
I void BalancedTree::erase(int k) {
v.erase(lb(v.begin(),v.end(),k));
}
I int BalancedTree::rank(int k) {
return lb(v.begin(),v.end(),k)-v.begin()+1;
}
I int BalancedTree::kth(int k) {
return v[k-1];
}
I int BalancedTree::pre(int k) {
return v[lb(v.begin(),v.end(),k)-v.begin()-1];
}
I int BalancedTree::post(int k) {
return v[ub(v.begin(),v.end(),k)-v.begin()];
}
BalancedTree t(100010);
int main() {
int n,q_,_q;
scanf("%d",&n);
while(n--) {
scanf("%d%d",&q_,&_q);
switch(q_) {
case 1: t.insert(_q);break;
case 2: t.erase(_q);break;
case 3: printf("%d\n",t.rank(_q));break;
case 4: printf("%d\n",t.kth(_q));break;
case 5: printf("%d\n",t.pre(_q));break;
case 6: printf("%d\n",t.post(_q));break;
}
}
return 0;
}
cs
猜你喜欢
转载自www.cnblogs.com/beilili/p/9047859.html
今日推荐
周排行