Pagini recente » Cod sursa (job #2533926) | Cod sursa (job #2117839) | Cod sursa (job #2703499) | Cod sursa (job #529063) | Cod sursa (job #495797)
Cod sursa(job #495797)
#include <stdio.h>
#include <stdlib.h>
struct point {
int inf;
point *leg;
};
point *h[500000];
long i,n,op,nr,n1,x;
void creare(long &n1) {
long m,x;
m=(n*n*n)/3;
x=1;
while(x<=m) x*=2;
m=(x/2+x)/2;
n1=m;
}
void insert(int x, int nr) {
point *p;
p=new point;
p->inf=nr;
p->leg=h[x];
h[x]=p;
}
void cauta(point *p,int nr,int ok) {
point *q,*t;
int ok1;
ok1=0;
if (p==NULL) {
if (ok==1) printf("0\n");
return;
}
if (p->inf==nr) {
t=p;
p=p->leg;
delete t;
ok1=1;
if (ok==1) printf("1\n");
return;
}
while (p!=NULL && p->inf!=nr) {
q=p;
p=p->leg;
}
if (ok==1) {
if (p==NULL) printf("0\n");
else printf("1\n");
}
else
if (p!=NULL && ok1==0) {
t=p;
q->leg=p->leg;
delete t;
}
}
int main () {
freopen("hashuri.in","r",stdin);
freopen("hashuri.out","w",stdout);
scanf("%ld",&n);
n1=0;
creare(n1);
for (i=1; i<=n; i++) {
scanf("%ld%ld",&op,&nr);
if (op==1) {
x=nr%n1;
insert(x,nr);
}
else
if (op==2) {
x=nr%n1;
cauta(h[x],nr,0);
}
else
if (op==3) {
x=nr%n1;
cauta(h[x],nr,1);
}
}
return 0;
}