Pagini recente » Cod sursa (job #637989) | Cod sursa (job #325555) | Cod sursa (job #2642895) | Cod sursa (job #2292986) | Cod sursa (job #371213)
Cod sursa(job #371213)
#include<stdio.h>
#include<stdlib.h>
#define NN 1000001
#define NM 1000001
struct nod{
int x;
nod*next;
};
struct lista{
nod*vf,*sf;
};
int n;
lista v[NM];
void add(lista&l,int x){
nod *nn=(nod*)malloc(sizeof(nod));;
nn->x=x;
nn->next=NULL;
if(!l.vf) l.vf=nn;
else l.sf->next=nn;
l.sf=nn;
}
int cauta(int x){
int r=x%NN;
nod *nc=v[r].vf;
while(nc&&nc->x!=x) nc=nc->next;
return nc!=0;
}
void sterge(int x){
int r=x%NN;
nod *t,*nc=v[r].vf;
if(!nc) return;
if(nc->x==x) {
if(nc==v[r].sf) v[r].sf=nc->next;
v[r].vf=nc->next;
free(nc);;
return;
}
while(nc->next&&nc->next->x!=x) nc=nc->next;
if(nc!=v[r].sf){
t=nc->next;
nc->next=nc->next->next;
if(t==v[r].sf) v[r].sf=nc;
free(t);
}
}
int main(){
freopen("hashuri.in","r",stdin);
freopen("hashuri.out","w",stdout);
int i,m,op,x;
char s[15],*p;
scanf("%d\n",&m);
while(m--){
fgets(s,14,stdin);
p=s;
op=atoi(p);p+=2;x=atoi(p);
switch(op){
case 1:i=cauta(x);
if(!i) add(v[x%NN],x);
break;
case 2:sterge(x);break;
case 3:i=cauta(x);
if(i) printf("1\n");
else printf("0\n");
}
}
return 0;
}