Pagini recente » Cod sursa (job #700536) | Cod sursa (job #2348298) | Cod sursa (job #77687) | Cod sursa (job #239605) | Cod sursa (job #654383)
Cod sursa(job #654383)
#include <cstdio>
#define file_in "heapuri.in"
#define file_out "heapuri.out"
struct nod{
int val;
nod *st, *dr;
};
nod * v;
int T,tip,val;
int nr,cnt[301000];
void inserare(nod *& c, int val){
if (c){
if (c->val>val)
inserare(c->st,val);
else
inserare(c->dr,val);
}
else{
c=new nod;
c->val=val;
c->st=c->dr=0;
}
}
void doit(nod *&c, nod *& a){
while(a->dr)
doit(c,a->dr);
nod * r;
c->val=a->val;
r=a;
a=a->st;
delete r;
}
void stergere(nod *& c, int x){
nod * a;
if (c){
if (c->val==x)
if (c->st==0 && c->dr==0){
delete c;
c=0;
}
else
if (c->st==0){
a=c->dr;
delete c;
c=a;
}
else
if (c->dr==0){
a=c->st;
delete c;
c=a;
}
else{
doit(c,c->st);
}
else
if (c->val<x)
stergere(c->dr,x);
else
stergere(c->st,x);
}
else
return ;
}
int min(nod * c){
while(c->st)
c=c->st;
return c->val;
}
int main(){
freopen(file_in,"r",stdin);
freopen(file_out,"w",stdout);
scanf("%d", &T);
nr=0;
while(T--){
scanf("%d", &tip);
if (tip==1){
scanf("%d", &val);
cnt[++nr]=val;
inserare(v,val);
}
else
if (tip==2){
scanf("%d", &val);
stergere(v,cnt[val]);
}
else
printf("%d\n", min(v));
}
return 0;
}