Pagini recente » Cod sursa (job #59814) | Cod sursa (job #402179) | Cod sursa (job #1563249) | Cod sursa (job #2482820) | Cod sursa (job #1527856)
#include <fstream>
using namespace std;
class Node {
public:
int value;
Node *prev, *next;
Node() {
value = -1;
prev = NULL;
next = NULL;
}
};
class Hash {
private:
const int MOD = 666013;
Node **h = new Node* [MOD];
public:
void insertValue(int x) {
int l = x % MOD;
Node *node = h[l];
while(node->next != NULL) {
if(node->value == x) {
return;
}
node = node->next;
}
node->value = x;
Node *tmp = new Node;
node->next = tmp;
tmp->prev = node;
}
void deleteValue(int x) {
int l = x % MOD;
Node *node = h[l];
while(node->next != NULL && node->value != x) {
node = node->next;
}
if(node->value == x) {
Node *tmp1 = node->prev, *tmp2 = node->next;
delete node;
if(tmp1 != NULL) {
tmp1->next = tmp2;
tmp2->prev = tmp1;
}
else {
h[l] = tmp2;
}
}
}
bool searchValue(int x) {
int l = x % MOD;
Node *node = h[l];
while(node->next != NULL && node->value != x) {
node = node->next;
}
if(node->value == x) {
return true;
}
else {
return false;
}
}
Hash() {
for(int i = 0; i < MOD; ++i) {
h[i] = new Node;
}
}
};
int main()
{
ifstream f("hashuri.in");
ofstream g("hashuri.out");
int n;
f >> n;
Hash h;
for(int i = 0; i < n; ++i) {
int op, x;
f >> op >> x;
if(op == 1) {
h.insertValue(x);
}
else if(op == 2) {
h.deleteValue(x);
}
else if(op == 3) {
g << h.searchValue(x) << "\n";
}
}
return 0;
}