Pagini recente » Cod sursa (job #700331) | Cod sursa (job #1396356) | Cod sursa (job #2222078) | Cod sursa (job #388035) | Cod sursa (job #2650848)
#define HASH_MOD 1000003
#define HASH_FUNC(X) ((X) % HASH_MOD)
#include <fstream>
using namespace std;
ifstream fin("hashuri.in");
ofstream fout("hashuri.out");
struct node
{
node(int _data, node* _previous = nullptr) : data(_data), previous(_previous)
{
}
int data;
node* previous;
};
node* HS[HASH_MOD] = { };
void Insert(int data);
void Remove(int data);
bool LookUp(int data);
void Cleanup();
int main()
{
int n;
fin >> n;
for (int i = 0; i < n; ++i)
{
int op, x;
fin >> op >> x;
switch (op)
{
case 1:
{
Insert(x);
break;
}
case 2:
{
Remove(x);
break;
}
case 3:
{
fout << LookUp(x) << '\n';
break;
}
}
}
Cleanup();
fin.close();
fout.close();
return 0;
}
void Insert(int data)
{
if (!LookUp(data))
{
int hfuncRes = HASH_FUNC(data);
node* last = HS[hfuncRes];
node* newLast = new node(data, last);
HS[hfuncRes] = newLast;
}
}
void Remove(int data)
{
int hfuncRes = HASH_FUNC(data);
node* elem = HS[hfuncRes];
node* next = nullptr;
while (elem != nullptr)
{
if (elem->data == data)
{
if (next != nullptr)
{
next->previous = elem->previous;
}
else
{
HS[hfuncRes] = elem->previous;
}
delete elem;
break;
}
next = elem;
elem = elem->previous;
}
}
bool LookUp(int data)
{
int hfuncRes = HASH_FUNC(data);
node* elem = HS[hfuncRes];
while (elem != nullptr)
{
if (elem->data == data)
{
return true;
}
elem = elem->previous;
}
return false;
}
void Cleanup()
{
for (int i = 0; i < HASH_MOD; ++i)
{
while (HS[i] != nullptr)
{
node* aux = HS[i];
HS[i] = HS[i]->previous;
delete aux;
}
}
}