Pagini recente » Cod sursa (job #2922387) | Cod sursa (job #2358238) | Cod sursa (job #1264796) | Cod sursa (job #1715228) | Cod sursa (job #2417832)
#include <iostream>
#include <fstream>
#include <vector>
struct node{
node *st,*dr;
int val;
}*bst;
node * find(int val,node * nod){
if(nod==NULL)
return NULL;
if(nod->val==val)
return nod;
if(val>nod->val)
return find(val,nod->dr);
return find(val,nod->st);
}
node * insert(int val,node *&nod){
if(nod==NULL){
nod=new node();
nod->val=val;
return nod;
}
if(val>nod->val)
return insert(val,nod->dr);
return insert(val,nod->st);
}
node * minb(node *start){
while(start->st!=NULL)
start=start->st;
return start;
}
node * erase(int val,node *&nod){
if(nod==NULL)
return NULL;
if(val<nod->val)
nod->st=erase(val,nod->st);
else
if(val>nod->val)
nod->dr=erase(val,nod->dr);
else{
if(nod->st==NULL){
node * tmp=nod->dr;
delete nod;
return tmp;
}
if(nod->dr==NULL){
node * tmp=nod->st;
delete nod;
return tmp;
}
node *tmp=minb(nod);
nod->val=tmp->val;
nod->dr=erase(tmp->val,nod->dr);
}
return nod;
}
std::ifstream in("heapuri.in");
std::ofstream out("heapuri.out");
std::vector<int>v;
int main(){
int n,t,aux;
in>>n;
for(int i=1;i<=n;i++){
in>>t;
if(t==3)
out<<minb(bst)->val<<'\n';
else{
in>>aux;
if(t==1){
insert(aux,bst);
v.push_back(aux);
}
else
erase(v[aux-1],bst);
}
}
return 0;
}