Pagini recente » Cod sursa (job #2559160) | Cod sursa (job #428125) | Cod sursa (job #3275393) | Cod sursa (job #701555) | Cod sursa (job #250213)
Cod sursa(job #250213)
#include <fstream>
#include <vector>
using namespace std;
const int Max_Heap_Size=2000001;
typedef int Heap[Max_Heap_Size];
int n,op,x;
Heap H;
int noduri=0;
fstream fin ("heapuri.in",ios::in);
fstream fout("heapuri.out",ios::out);
inline int father(int nod){
return nod/2;
}
inline int left_son(int nod){
return 2*nod;
}
inline int right_son(int nod){
return 2*nod+1;
}
void insert(int x){
int nod=++noduri;
int aux;
H[nod]=x;
while(father(nod) && (H[father(nod)]<x)){
aux=H[nod];
H[nod]=H[father(nod)];
H[father(nod)]=aux;
nod=father(nod);
}
}
void del(int x){
int nod=noduri,aux;
noduri--;
H[x]=H[nod];
H[x]=0;
nod=x;
if (H[father(nod)]<H[nod]){
while(father(nod) && (H[father(nod)]<H[nod])){
aux=H[nod];
H[nod]=H[father(nod)];
H[father(nod)]=aux;
nod=father(nod);
}
}
else{
while(left_son(nod) && (H[left_son(nod)]>H[nod] || H[right_son(nod)]>H[nod])){
if (H[left_son(nod)]>H[nod]){
aux=H[left_son(nod)];
H[left_son(nod)]=H[nod];
H[nod]=aux;
nod=left_son(nod);
}
else{
aux=H[right_son(nod)];
H[right_son(nod)]=H[nod];
H[nod]=aux;
nod=right_son(nod);
}
}
}
}
void afis(){
int min=H[1];n;
for(int i=1;i<=noduri;i++){
if (H[i]<min) min=H[i];
}
fout<<min<<endl;
}
int main(){
fin>>n;
for (int i=1;i<=n;i++){
fin>>op;
switch (op){
case 1 :fin>>x;
insert(x);
break;
case 2 :fin>>x;
del(x);
break;
case 3 :afis();
break;
}
}
}