Pagini recente » Cod sursa (job #1863345) | Cod sursa (job #1613566) | Cod sursa (job #1854640) | Cod sursa (job #276792) | Cod sursa (job #930547)
Cod sursa(job #930547)
#include<stdio.h>
using namespace std;
struct nod{int inf;nod *st,*dr;};
nod *r;
int n;
void insert(nod *&r,int x)
{
if(r)
{
if(x<r->inf) insert(r->st,x);
else
if(x>r->inf) insert(r->dr,x);
}
else
{
r=new nod;
r->inf=x;
r->st=0;
r->dr=0;
}
}
void del(int x)
{
nod *p,*t=0 ,*q,*fiu;
int maxx;
p=r;
while(p && p->inf!=x)
{
t=p;
if(x<p->inf) p=p->st;
else
p=p->dr;
}
if(p==0) return;
if(p->st && p->dr)
{
t=p;
q=p->st;
maxx=q->inf;
while(q->dr) {maxx=q->dr->inf; t=q; q=q->dr;}
p->inf=maxx;
p=q;
}
if(p->st) fiu=p->st;
else fiu=p->dr;
if(t)
{
if(t->st==p) t->st=fiu;
else t->dr=fiu;
}
else
r=fiu;
delete p;
}
int search(nod *r,int x)
{
if(r==0) return 0;
if(r->inf==x) return 1;
if(x<r->inf) return search(r->st,x);
if(x>r->inf) return search(r->dr,x);
}
void cit()
{
int i,ok,x;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d%d",&ok,&x);
if(ok==1) insert(r,x);
else
if(ok==2) del(x);
else
printf("%d\n",search(r,x));
}
}
int main()
{
freopen("hashuri.in","r",stdin);
freopen("hashuri.out","w",stdout);
cit();
fclose(stdin);
fclose(stdout);
return 0;
}