Pagini recente » Cod sursa (job #1180700) | Cod sursa (job #3040792) | Cod sursa (job #770412) | Cod sursa (job #642224) | Cod sursa (job #411949)
Cod sursa(job #411949)
#include <cstdio>
using namespace std;
#define ll long long
#define abs(x) ((x>0)?(x):(-(x)))
FILE *g=fopen("zeap.out","w");
FILE *f=fopen("zeap.in","r");
char s[25],o[5];
int ne;
ll x[2],n,mn;
struct arbore
{
ll x;
arbore *st,*dr;
};
arbore *A;
void insert(arbore *&ar,ll x)
{
if(ar==NULL)
{
arbore *p=new arbore;
p->st=p->dr=NULL;
p->x=x;
ar=p;
++ne;
return;
}
if(x==ar->x)return;
if(x>ar->x)
insert(ar->dr,x);
else
insert(ar->st,x);
}
void del(arbore *&ar,ll x)
{
if(ar==NULL)
{
fprintf(g,"-1\n");
return;
}
if(ar->x==x)
{
arbore *aux=ar;
if(!aux->st&&!aux->dr)
{
aux=NULL;
ar=aux;
--ne;
delete aux;
return;
}
if(aux->st!=NULL||aux->dr!=NULL)
{
if(!aux->st)
{
arbore *p=aux;
aux=aux->dr;
ar=aux;
delete p;
--ne;
return;
}
if(!aux->dr)
{
arbore *p=aux;
aux=aux->st;
ar=aux;
delete p;
--ne;
return;
}
}
if(aux->st&&aux->dr)
{
arbore *p=new arbore;
p->x=aux->st->x;
p->st=aux->st;
p->dr=aux->dr;
aux=p;
del(aux->st,aux->x);
}
}
else if(ar->x>x)
del(ar->st,x);
else
del(ar->dr,x);
}
void search(arbore *ar,int x)
{
if(ar==NULL)
{
fprintf(g,"0\n");
return;
}
if(ar->x==x)
{
fprintf(g,"1\n");
return;
}
if(x<ar->x)
search(ar->st,x);
else
search(ar->dr,x);
}
ll dreapta(arbore *ar)
{
if(!ar->dr)
return ar->x;
return dreapta(ar->dr);
}
ll stanga(arbore *ar)
{
if(!ar->st)
return ar->x;
return stanga(ar->st);
}
void max(arbore *ar)
{
if(ne<2)
fprintf(g,"-1\n");
else
fprintf(g,"%lld\n",(dreapta(ar)-stanga(ar)));
}
void min(arbore *ar)
{
if(ar==NULL) return;
min(ar->dr);
x[(++n)%2]=ar->x;
if(n)
{
if(mn==-1||(mn>abs(x[n%2]-x[(n-1)%2])))
mn=abs(x[n%2]-x[(n-1)%2]);
}
min(ar->st);
}
int main()
{
int i;
ll x;
A=NULL;
while(fgets(s,25,f))
{
i=0;
while(s[i]>='A') o[i]=s[i++];
i++;
if(i==4)
{
if(o[1]=='A')
{
max(A);
}
else
{
if(ne>=2)
{
mn=n=-1;
min(A);
fprintf(g,"%lld\n",mn);
}
else
fprintf(g,"-1\n");
}
}
else
{
x=0;
while(s[i]>='0'&&s[i]<='9')x=x*10+(s[i++]-'0');
if(o[0]=='S')
del(A,x);
if(o[0]=='I')
insert(A,x);
if(o[0]=='C')
search(A,x);
}
}
return 0;
}