Pagini recente » Cod sursa (job #2895771) | Cod sursa (job #307634) | Cod sursa (job #2924591) | Cod sursa (job #1148210) | Cod sursa (job #130282)
Cod sursa(job #130282)
#include<stdio.h>
struct nod{int x;nod *urmator,*precedent;};
nod *p,*u,*exista,*t,*aux;
char op[50];
int i,j,x,calc,val;
inline void valoare(){
x=0,j=1;
while(op[j]==' ') j++;
while(op[j])
{x=x*10+op[j]-'0';j++;}}
inline void cauta_poz_adaug()
{if(x<p->x) {t=0;return;}
if(x>u->x) {t=u;return;}
if(x==p->x) {t=exista;return;}
for(t=p;;t=t->urmator){
if(t->urmator->x==x) {t=exista;return;}
if(t->urmator->x>x)return;}}
inline void insereaza(){
if(!p){
p=new nod;
u=p;
p->urmator=0;
p->precedent=0;
p->x=x;
calc=0;
return;}
cauta_poz_adaug();
if(t==exista) return;
aux=new nod;
aux->x=x;
if(t&&t!=u){
if(t->urmator->x-x<val) val=t->urmator->x-x;
if(x-t->precedent->x<val) val=x-t->precedent->x;
aux->precedent=t;
aux->urmator=t->urmator;
t->urmator->precedent=aux;
t->urmator=aux;
return;}
if(t==u){
aux->precedent=t;
aux->urmator=0;
t->urmator=aux;
u=aux;
return;}
aux->urmator=p;
aux->precedent=0;
p->precedent=aux;
p=aux;}
inline void cauta_poz(){
for(t=p;t;t=t->urmator)
if(t->x==x) return;}
inline void sterge(){
cauta_poz();
if(!t){printf("-1\n");return;}
if(t==p){
if(t!=u && t->urmator->x-x==val) calc=0;
p=p->urmator;
delete t;
return;}
if(t!=u && t->urmator->x-x==val) calc=0;
if(x-t->precedent->x==val) calc=0;
aux=t->precedent;
aux->urmator=t->urmator;
t->urmator->precedent=aux;
delete t;}
inline void cauta(){
cauta_poz();
if(!t) printf("0\n");
else printf("1\n");}
inline void max(){
if(!p || p==u) printf("-1\n");
else printf("%d\n",u->x-p->x);}
inline void calculeaza_min()
{val=p->urmator->x-p->x;
for(t=p->urmator;t->urmator;t=t->urmator)
if(val>t->urmator->x-t->x) val=t->urmator->x-t->x;}
inline void min(){
if(!p || p==u) printf("-1\n");
else
if(calc) printf("%d\n",val);
else {
calculeaza_min();
calc=1;
printf("%d\n",val);}}
int main()
{freopen("zeap.in","r",stdin);
freopen("zeap.out","w",stdout);
exista=new nod;
while(!feof(stdin)){
gets(op);
switch(op[0]){
case 'I':{
valoare();
insereaza();}break;
case 'S':{
valoare();
sterge();}break;
case 'C':{
valoare();
cauta();}break;
case 'M':{
if(op[1]=='I') {min();}
else {max();}break;}
}
}
fclose(stdout);
return 0;}