Pagini recente » Cod sursa (job #1393681) | Cod sursa (job #1807395) | Cod sursa (job #824717) | Cod sursa (job #1010813) | Cod sursa (job #1499696)
#include <iostream>
#include <cstdio>
using namespace std;
const int HASH_SIZE = 1000000;
struct nod
{
int val = 0;
nod *adr = 0;
} *Hash[HASH_SIZE];
const double A = 0.618034;
int frac(double x)
{
if(x>1) return x - (int)x;
if(x<1&&x>=0) return x;
return (int)x - x;
}
int h(int x)
{
return x%666013;
}
int cautare(int x)
{
for(nod *q = Hash[h(x)]; q ; q = q->adr)
if(q->val == x)
return 1;
return 0;
}
void adaugare(int x)
{
int index = h(x);
nod *p = Hash[index];
if(p == NULL)
{
p = new nod;
p ->val = x;
p ->adr = 0;
Hash[index] = p;
return;
}
if(p -> val == x)
return;
nod *q;
for(q = p; q->adr ; q = q->adr)
if(q->adr->val == x)
return;
nod *r = new nod;
r->adr = 0;
r->val = x;
q->adr = r;
}
void stergere(int x)
{
int index = h(x);
nod *p = Hash[index];
if(p==NULL)
{
return;
}
if(p->val == x)
{
Hash[index] = Hash[index]->adr;
return;
}
nod *q;
for(q = p; q->adr ; q = q->adr)
if(q->adr->val == x)
{
q->adr = q->adr->adr;
return;
}
}
int main()
{
freopen("hashuri.in","r",stdin);
freopen("hashuri.out","w",stdout);
int n,op,x;
scanf("%d",&n);
for(int i = 1; i<=n; i++)
{
scanf("%d%d",&op,&x);
if(op == 1)
{
adaugare(x);
}
else if(op == 2)
{
stergere(x);
}
else if(op == 3)
{
printf("%d\n", cautare(x));
}
}
return 0;
}