Cod sursa(job #2604748)

Utilizator lauratenderLaura Tender lauratender Data 23 aprilie 2020 13:58:21
Problema Hashuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.27 kb
#include <bits/stdc++.h>
#define MOD 666013
#define MAXN 1000000
std::ifstream in("hashuri.in");
std::ofstream out("hashuri.out");
struct HashTable{
    int lista[MOD], next[1 + MAXN];
    int k, val[1 + MAXN];

    void Insert(int element){
        k++;
        val[k] = element;
        next[k] = lista[element % MOD];
        lista[element % MOD] = k;
    }
    void Delete(int element){
        int hsh = element % MOD;
        int p = lista[hsh];

        if(p == 0) return;
        if(val[p] == element){
            lista[hsh] = next[lista[hsh]];
            return;
        }
        while(next[p] != 0 && val[next[p]] != element)
            p = next[p];
        if(next[p] != 0)
            next[p] = next[next[p]];
    }
    bool bSearch(int element){
        int p = lista[element % MOD];
        while(p != 0 && val[p] != element)
            p = next[p];
        return (p != 0);
    }
};
HashTable H;
int main()
{
    int N;
    in>>N;
    for (int i=0; i<N; i++)
    {
        int op, nr;
        in>>op>>nr;
        if (op == 1)
            if (H.bSearch(nr) == 0)
                H.Insert(nr);
        if (op == 2)
            H.Delete(nr);
        if (op == 3)
            out<<H.bSearch(nr)<<"\n";
    }
    return 0;
}