题解 | 【模板】多重集合操作

【模板】多重集合操作

https://www.nowcoder.com/practice/aaf8b53f6ea74ad6beabed77bb275725

#include <algorithm>
#include<bits/stdc++.h>
#include <vector>
using namespace std;
vector<int> M;
int id;
void insertValue(int x){
    //TODO 实现插入逻辑
    id = lower_bound(M.begin(), M.end(), x)-M.begin();
    M.insert(M.begin()+id, x);
}
void eraseValue(int x){
    //TODO 实现删除逻辑
    id = lower_bound(M.begin(), M.end(), x)-M.begin();
    if (id<M.size() and M[id]==x)M.erase(M.begin()+id);
}
int xCount(int x){
    //TODO 求x在集合中的个数
    id = lower_bound(M.begin(), M.end(), x)-M.begin();
    int i=0;
    while(id+i<M.size() and M[id+i]==x) i++;
    return i;
}
int sizeOfSet(){
    //TODO 返回集合大小
    return M.size();
}
int getPre(int x){
    //TODO 实现找前驱
    id = lower_bound(M.begin(), M.end(), x)-M.begin();
    if(id>0)return M[id-1];
    return -1;
}
int getBack(int x){
    //TODO 实现找后继
    id = upper_bound(M.begin(), M.end(), x)-M.begin();
    if (id<M.size())return M[id];
    return -1;
}

int main(){
    int q,op,x;
    cin>>q;
    while(q--){
        cin>>op;
        if(op==1){
            cin>>x;
            insertValue(x);
        }
        if(op==2){
            cin>>x;
            eraseValue(x);
        }
        if(op==3){
            cin>>x;
            cout<<xCount(x)<<endl;
        }
        if(op==4){
            cout<<sizeOfSet()<<endl;
        }
        if(op==5){
            cin>>x;
            cout<<getPre(x)<<endl;
        }
        if(op==6){
            cin>>x;
            cout<<getBack(x)<<endl;
        }
    }
    return 0;
}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务