Pagini recente » Cod sursa (job #494723) | Cod sursa (job #2507287) | Cod sursa (job #2320558) | Cod sursa (job #1866221) | Cod sursa (job #3135187)
#include <fstream>
using namespace std;
const int N = 1e6;
const int K = 1 << 19;
struct element
{
int val, urm;
};
element v[N+1];
int lst[K], nr;
int cauta(int x)
{
int cat = x & (K - 1);
for (int p = lst[cat]; p != 0; p = v[p].urm)
{
if (v[p].val == x)
{
return p;
}
}
return 0;
}
void adauga(int x)
{
if (cauta(x) != 0)///x este deja in tabela
{
return;
}
int cat = x & (K - 1);
nr++;
v[nr].val = x;
v[nr].urm = lst[cat];
lst[cat] = nr;
}
void sterge(int x)
{
int p = cauta(x);
if (p == 0)
{
return;
}
int cat = x & (K - 1);
v[p].val = v[lst[cat]].val;///copiez informatia ultimului la poz "stearsa"
lst[cat] = v[lst[cat]].urm;///sterg de fapt ultimul element din lista (primul accesibil)
}
int main()
{
ifstream in("hashuri.in");
ofstream out("hashuri.out");
int n;
in >> n;
for (int i = 0; i < n; i++)
{
int tip, x;
in >> tip >> x;
if (tip == 1)
{
adauga(x);
}
else if (tip == 2)
{
sterge(x);
}
else
{
out << (cauta(x) != 0) << "\n";
}
}
return 0;
}