Pagini recente » Cod sursa (job #359354) | Cod sursa (job #1644461) | Cod sursa (job #2948439) | Cod sursa (job #2916969) | Cod sursa (job #1532921)
#include <cstdio>
using namespace std;
class Hash {
private:
class Node {
public:
int value;
Node *next;
Node() {
value = -1;
next = NULL;
}
};
const int MOD = 666013;
Node **h = new Node* [MOD];
public:
void insertValue(int x) {
int l = x % MOD;
if(h[l] == NULL) {
h[l] = new Node;
}
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;
}
void deleteValue(int x) {
int l = x % MOD;
if(h[l] == NULL) {
return;
}
Node *node = h[l];
if(node->value == x) {
h[l] = node->next;
delete node;
}
else {
while(node->next && node->next->value != x) {
node = node->next;
}
if(node->next != NULL) {
Node *tmp = node->next;
node->next = node->next->next;
delete tmp;
}
}
}
bool searchValue(int x) {
int l = x % MOD;
if(h[l] == NULL) {
return false;
}
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] = NULL;
}
}
};
int main()
{
freopen("hashuri.in", "r", stdin);
freopen("hashuri.out", "w", stdout);
int n;
scanf("%d", &n);
Hash h;
for(int i = 0; i < n; ++i) {
int op, x;
scanf("%d %d", &op, &x);
if(op == 1) {
h.insertValue(x);
}
else if(op == 2) {
h.deleteValue(x);
}
else if(op == 3) {
printf("%d\n", h.searchValue(x));
}
}
fclose(stdin);
fclose(stdout);
return 0;
}