Pagini recente » Cod sursa (job #2958046) | Cod sursa (job #2261298) | Cod sursa (job #2956629) | Cod sursa (job #2019442) | Cod sursa (job #335932)
Cod sursa(job #335932)
#include <stdio.h>
#define mod 58967
struct lista
{
lista *nxt;
lista *prev;
int val;
};
lista *h[mod];
lista *p[mod];
lista *aux;
void add(int nr)
{
int key = nr % mod;
if (h[key] == 0)
{
h[key] = new lista;
h[key]->val = nr;
h[key]->prev = 0;
h[key]->nxt = 0;
p[key] = h[key];
}
else
{
while (h[key]!=0)
{
if (h[key]->val == nr)
{
h[key] = p[key];
return;
}
aux = h[key];
h[key] = h[key]->nxt;
}
h[key] = new lista;
h[key]->prev = aux;
h[key]->nxt = 0;
h[key] = p[key];
}
}
void find(int nr)
{
int key = nr % mod;
while (h[key] !=0)
{
if (h[key]->val == nr)
{
printf("1\n");
h[key] = p[key];
return;
}
}
h[key] = p[key];
printf("0\n");
}
void del(int nr)
{
int key = nr % mod;
while (h[key] !=0)
{
if (h[key]->val == nr)
{
if (h[key]->nxt == 0 && h[key]->prev == 0)
{
delete h[key];
h[key] = 0;
p[key] = 0;
return;
}
if (h[key]->prev == 0)
{
p[key] = h[key]->nxt;
h[key]->nxt->prev = 0;
delete h[key];
h[key] = 0;
h[key] = p[key];
return;
}
if (h[key]->nxt == 0)
{
h[key]->prev->nxt = 0;
delete h[key];
h[key] = 0;
h[key] = p[key];
return;
}
h[key]->prev->nxt = h[key]->nxt;
h[key]->nxt->prev = h[key]->prev;
delete h[key];
h[key] = p[key];
return;
}
}
}
int main()
{
freopen("hashuri.in","r",stdin);
freopen("hashuri.out","w",stdout);
int n,op,i,p;
scanf("%d",&n);
for (i=0;i<n;i++)
{
scanf("%d %d",&op,&p);
switch (op)
{
case 1:
add(p);
break;
case 2:
del(p);
break;
case 3:
find(p);
break;
}
}
return 0;
}