Cod sursa(job #3211151)

Utilizator Razvan_GabrielRazvan Gabriel Razvan_Gabriel Data 8 martie 2024 16:53:58
Problema Hashuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.25 kb
#include <iostream>
#include <fstream>

using namespace std;

const int K = 1 << 19;
const int N = 1e6;

int lst[K], val[N + 1], urm[N + 1], nr;

int pozitie(int cat, int x)
{
    for(int p = lst[cat]; p != 0; p = urm[p])
    {
        if(val[p] == x)
            return p;
    }

    return -1;
}

void adauga(int x)
{
    int cat = x & (K - 1); //x % K (sunt puteri ale lui 2
    int p = pozitie(cat, x);
    if(p == -1)
    {
        nr++;
        val[nr] = x;
        urm[nr] = lst[cat];
        lst[cat] = nr;
    }
}

void sterge(int x)
{
    int cat = x & (K - 1); //x % K (sunt puteri ale lui 2
    int p = pozitie(cat, x);
    if(p != -1)
    {
        val[p] = val[lst[cat]];
        lst[cat] = urm[lst[cat]];
    }
}

bool cauta(int x)
{
    int cat = x & (K - 1); //x % K (sunt puteri ale lui 2
    return (pozitie(cat, x) != -1);
}

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

    int nq;
    fin >> nq;
    for(int i = 0 ; i < nq; i++)
    {
        int tip, x;
        fin >> tip >> x;
        if(tip == 1)
            adauga(x);
        else if(tip == 2)
            sterge(x);
        else
            fout << cauta(x) << "\n";
    }

    return 0;
}