Pagini recente » Cod sursa (job #2067060) | Cod sursa (job #3124396) | Cod sursa (job #1683992) | Cod sursa (job #3237444) | Cod sursa (job #3211151)
#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;
}