Pagini recente » Cod sursa (job #2986322) | Cod sursa (job #2720131) | Cod sursa (job #1562537) | Cod sursa (job #117358) | Cod sursa (job #1835785)
#include <iostream>
#include <fstream>
#define NMAX 13831
#define BUFF_SIZE 65536
using namespace std;
ifstream in("hashuri.in");
ofstream out("hashuri.out");
char buffer[BUFF_SIZE];
int pos = 0;
void Read(int &a)
{
while (!isdigit(buffer[pos]))
if (++pos == BUFF_SIZE)
in.read(buffer, BUFF_SIZE), pos = 0;
a = 0;
while (isdigit(buffer[pos]))
{
a = a * 10 + buffer[pos] - '0';
if (++pos == BUFF_SIZE)
in.read(buffer, BUFF_SIZE), pos = 0;
}
}
struct node{
int key;
node *next;
};
struct _list{
node *head;
};
_list H[NMAX];
bool _find(_list L, int key)
{
for (node *p = L.head; p != NULL; p = p->next)
if (p->key == key)
return 1;
return 0;
}
void push(_list &L, int key)
{
if (!_find(L, key))
{
node *p = new node;
p->key = key;
p->next = NULL;
if (L.head == NULL)
L.head = p;
else
{
p->next = L.head;
L.head = p;
}
}
}
void _delete(_list &L, int key)
{
if (_find(L, key))
{
if (L.head->key == key)
{
node *p = L.head;
L.head = L.head->next;
delete p;
}
else
{
node *p;
for (p = L.head; p->next->key != key; p = p->next);
node *del = p->next;
p->next = del->next;
delete del;
}
}
}
int main()
{
int n, op, key;
Read(n);
for (int i = 1; i <= n; i++)
{
Read(op), Read(key);
if (op == 1)
push(H[key % NMAX], key);
else if (op == 2)
_delete(H[key % NMAX], key);
else
out << _find(H[key % NMAX], key) << "\n";
}
out.close();
return 0;
}