Pagini recente » Cod sursa (job #2585597) | Cod sursa (job #1112589) | Cod sursa (job #974001) | Cod sursa (job #1717005) | Cod sursa (job #2128630)
#include <iostream>
#include <cstdio>
#define M 999863
using namespace std;
struct li
{
int val;
li *n;
}v[999863];
void addelem(int x)
{
int m;
m = x % M;
if(!v[m].val)
v[m].val = x;
else
{
int ok = 0;
li *p = &v[m];
while(p->n)
{
if((p)->val == x){ok=1;break;}
(p) = (p)->n;
}
if(!ok)
{
(p->n)= new li;
(p->n)->val = x;
(p->n)->n = NULL;
}
}
}
int caut(int x)
{
int m=x%M;
li *p = &v[m];
while(p)
{
if(x == p->val)return 1;
p=p->n;
}
return 0;
}
void sterge(int x)
{
int m=x%M, ok=0;
li *p = &v[m], *q;
if(v[m].val != x)
{
while(p)
{
q = p;
if(x == p->val){break;ok=1;}
p=p->n;
}
if(ok){if(p->n)q->n = p->n; else q->n=NULL;}
}
else
{
if(v[m].n)
{
v[m].val = v[m].n->val;
v[m].n = v[m].n->n;}
else {v[m].val=0;v[m].n=NULL;}
}
}
int main()
{
freopen("hashuri.in","r",stdin);
freopen("hashuri.out","w",stdout);
int n,i,a,b;
scanf("%d", &n);
for(i=0;i<n;i++)
{
scanf("%d%d", &a, &b);
if(a==1)
{
addelem(b);
}
else
if(a==2)
{
sterge(b);
}
else
{
printf("%d\n", caut(b));
}
}
return 0;
}