Cod sursa(job #2445628)

Utilizator akaprosAna Kapros akapros Data 4 august 2019 22:19:08
Problema Hashuri Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.18 kb
#include <bits/stdc++.h>
#define maxN 1000002
#define m 49157


using namespace std;


FILE *fin = freopen("hashuri.in", "r", stdin);
FILE *fout = freopen("hashuri.out", "w", stdout);

int n, r = 2, A[3];

class Hahs
{
public :
    set < int > L[m];
    int Key(int x)
    {
        int cp = x, K = 0;
        for (int i = 0; i < r; ++ i, cp /= m)
            K = (1LL * A[i] * (cp % m) + K) % m;
        return K;
    }
    void Insert(int x)
    {
        int k = Key(x);
            L[k].insert(x);
    }
    void Delete(int x)
    {
        int k = Key(x);
        if (L[k].find(x) != L[k].end())
            L[k].erase(x);
    }
    bool Search(int x)
    {
        int k = Key(x);
        return (L[k].find(x) != L[k].end());
    }
} H;

int main()
{
    scanf("%d", &n);
    srand(time(0));

    int a = rand();
    int cp = a;
    for (int i = 0; i < r; ++ i, cp /= m)
        A[i] = cp % m;
    while (n --)
    {
        int ty, x;
        scanf("%d%d", &ty, &x);
        if (ty == 1)
            H.Insert(x);
        else if (ty == 2)
            H.Delete(x);
        else
            printf("%d\n", H.Search(x));
    }
    return 0;
}