Cod sursa(job #1414427)

Utilizator AlexandruValeanuAlexandru Valeanu AlexandruValeanu Data 2 aprilie 2015 16:46:11
Problema Hashuri Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.11 kb
#include <bits/stdc++.h>

using namespace std;

const int MOD = (1 << 21) - 1;
const int EMPTY = -1;
const int ERASED = -2;

int table[MOD + 1];

void insert(int key)
{
    int p = key & MOD;

    while (table[p] != EMPTY && table[p] != ERASED)
        p = (p + 1) & MOD;

    table[p] = key;
}

bool find(int key)
{
    int p = key & MOD;

    while (table[p] != EMPTY && table[p] != key)
        p = (p + 1) & MOD;

    return (table[p] == key);
}

void erase(int key)
{
    int p = key & MOD;

    while (table[p] != EMPTY && table[p] != key)
        p = (p + 1) & MOD;

    if (table[p] == key)
        table[p] = ERASED;
}

int main()
{
    ifstream in("hashuri.in");
    ofstream out("hashuri.out");

    ios_base::sync_with_stdio( false );

    for (int i = 0; i <= MOD; ++i)
        table[i] = EMPTY;

    int N;
    in >> N;

    while ( N-- )
    {
        int tip, x;

        in >> tip >> x;

        switch(tip)
        {
            case 1: insert(x); break;
            case 2: erase(x); break;
            case 3: out << find(x) << "\n"; break;

            default: cerr << "Error\n";
        }
    }

    return 0;
}