• 牛客 136G-指纹锁 set容器重载


    136G-指纹锁

    题意:

       设计一个容器,支持插入x,若与容器中的值最小相差为k,则自动忽略。删除操作,把与x相差为k的值都从容器中删除。查询操作,问容器中有没有和x相差为k的数值。

    思路:

      一个stl中的set 加上cmp结构体重载就搞定了。神奇。

    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    #include <cstring>
    #include <string>
    #include <vector>
    #include <map>
    #include <set>
    #include <queue>
    #include <list>
    #include <cstdlib>
    #include <iterator>
    #include <cmath>
    #include <iomanip>
    #include <bitset>
    #include <cctype>
    using namespace std;
    //#pragma GCC optimize(3)
    //#pragma comment(linker, "/STACK:102400000,102400000")  //c++
    #define lson (l , mid , rt << 1)
    #define rson (mid + 1 , r , rt << 1 | 1)
    #define debug(x) cerr << #x << " = " << x << "
    ";
    #define pb push_back
    #define pq priority_queue
    
    
    
    typedef long long ll;
    typedef unsigned long long ull;
    
    typedef pair<ll ,ll > pll;
    typedef pair<int ,int > pii;
    typedef pair<int ,pii> p3;
    //priority_queue<int> q;//这是一个大根堆q
    //priority_queue<int,vector<int>,greater<int> >q;//这是一个小根堆q
    #define fi first
    #define se second
    //#define endl '
    '
    
    #define OKC ios::sync_with_stdio(false);cin.tie(0)
    #define FT(A,B,C) for(int A=B;A <= C;++A)  //用来压行
    #define REP(i , j , k)  for(int i = j ; i <  k ; ++i)
    //priority_queue<int ,vector<int>, greater<int> >que;
    
    const ll mos = 0x7FFFFFFFLL;  //2147483647
    const ll nmos = 0x80000000LL;  //-2147483648
    const int inf = 0x3f3f3f3f;
    const ll inff = 0x3f3f3f3f3f3f3f3fLL; //18
    const double PI=acos(-1.0);
    
    template<typename T>
    inline T read(T&x){
        x=0;int f=0;char ch=getchar();
        while (ch<'0'||ch>'9') f|=(ch=='-'),ch=getchar();
        while (ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar();
        return x=f?-x:x;
    }
    // #define _DEBUG;         //*//
    #ifdef _DEBUG
    freopen("input", "r", stdin);
    // freopen("output.txt", "w", stdout);
    #endif
    /*-----------------------show time----------------------*/
                    int n,k;        char str[10];
                    struct cmp
                    {   
                        bool operator()(int a,int b)const {
                            if(abs(a-b) <= k)return false;
                            return a < b;
                        }
                    };
                    set<int,cmp>s;
    int  main(){
                    scanf("%d%d", &n, &k);
                    for(int i=1; i<=n; i++){
                        int x;  scanf("%s%d", str, &x);
                        if(str[0] == 'a'){
                            if(s.find(x) == s.end()) s.insert(x);    
                        }
                        else if(str[0] == 'q'){
                            if(s.find(x) == s.end()) puts("No");
                            else puts("Yes");
                        }
                        else {
                            while(s.find(x) != s.end()){
                                s.erase(x);
                            }
                        }
                    }
                    return 0;
    }
    136G

     

  • 相关阅读:
    【开发者笔记】MQTT python测试笔记
    【工具】代码生成器-python脚本
    【开发者笔记】进制转换
    【开发者笔记】按List中存放对象的某一字段计数的问题
    【开发者笔记】二分法查找
    【数据库学习】聚合函数的使用
    【开发者笔记】学习区块链过程中的一些理解
    【spring学习】中文乱码问题
    【开发者笔记】我也来画一个手机
    【开发者笔记】java 利用jna调用c#的dll
  • 原文地址:https://www.cnblogs.com/ckxkexing/p/9521750.html
Copyright © 2020-2023  润新知