Pagini recente » Cod sursa (job #2438077) | Cod sursa (job #579014) | Cod sursa (job #67605) | Cod sursa (job #1136261) | Cod sursa (job #894501)
Cod sursa(job #894501)
#include<stdio.h>
#define M 6613
FILE *f=fopen("hashuri.in","r");
FILE *g=fopen("hashuri.out","w");
typedef struct nod{int x;nod *urm,*ant;}NOD;
typedef struct {bool ok;NOD *prim,*ultim;}HASH;
HASH v[M];
NOD *p;
int i,j,n,ok,x;
void adaugare(int x)
{
p=new NOD;
p->x=x;
if(v[x%M].ultim==NULL)
{
v[x%M].ultim=v[x%M].prim=p;
v[x%M].ultim->ant=NULL;
v[x%M].prim->ant=NULL;
}
else
{
v[x%M].ultim->urm=p;
p->ant=v[x%M].ultim;
v[x%M].ultim=p;
}
v[x%M].ultim->urm=NULL;
v[x%M].ok=1;
}
void stergere(int x)
{
p=new NOD;
p=v[x%M].prim;
for(p;p!=NULL;p=p->urm)
{
if(p->x==x)
{
if(p!=v[x%M].prim)
{
p->ant->urm=p->urm;
p->urm->ant=p->ant;
}
delete p;
}
}
}
int cautare(int x)
{
p=new NOD;
p=v[x%M].prim;
for(p;p!=NULL;p=p->urm)
if(p->x==x)
return 1;
return 0;
}
int main()
{
fscanf(f,"%d",&n);
for(i=1;i<=n;i++)
{
fscanf(f,"%d" "%d",&ok,&x);
if(ok==1)
adaugare(x);
if(ok==2)
if(v[x%M].ok==1)
stergere(x);
if(ok==3)
if(v[x%M].ok==0)
fprintf(g,"0\n");
else
fprintf(g,"%d\n",cautare(x));
}
}