Cod sursa(job #1813139)

Utilizator CiurezAndreiCiurez Marius-Andrei CiurezAndrei Data 22 noiembrie 2016 18:53:01
Problema Hashuri Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.89 kb
#include <bits/stdc++.h>

#define Lch (1 << 19) - 1

using namespace std;

ifstream fin("hashuri.in");
ofstream fout("hashuri.out");

struct Hash{

    int data;
    Hash *next;
    Hash *before;

}*L[Lch + 1];

inline bool hashFind(const int &x)
{
    int cheie = x & Lch;
    Hash *p;

    for(p = L[cheie]; p; p = p -> next)
    {
        if( p -> data == x )
        {
            return true;
        }
    }
    return false;
}

inline void hashInsert(const int &x)
{
    int cheie = x & Lch;
    Hash *p;
   if(hashFind(x) == false)
   {
        p = new Hash;
        p -> data = x;
        p -> next = L[cheie];
        p -> before = NULL;
        if(L[cheie] != NULL)
        {
            L[cheie] -> before = p;
        }
        L[cheie] = p;
   }
}

inline void hashErase(const int &x)
{
    int cheie = x & Lch;
    Hash *p;

    for(p = L[cheie]; p; p = p -> next)
    {
        if( p -> data == x )
        {
            if(p -> before != NULL)
            {
                (p -> before) -> next = p -> next;
            }
            else
            {
                L[cheie] = p -> next;
            }
            delete p;
            break;
        }
    }
}

int main()
{
    int n;
    fin >> n;

    for(int i = 1; i <= n; i ++)
    {
        int op;
        int x;
        fin >> op;

        if(op == 1)
        {
            fin >> x;
            hashInsert(x);
        }
        else
            if(op == 2)
            {
                fin >> x;
                hashErase(x);
            }
            else
            {
                fin >> x;
                if(hashFind(x) == true)
                {
                    fout << "1" << '\n';
                }
                else
                {
                    fout << "0" << '\n';
                }
            }
    }
    return 0;
}