cs

#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;
}

猜你喜欢

转载自www.cnblogs.com/beilili/p/9047859.html
cs