Pagini recente » Cod sursa (job #616408) | Cod sursa (job #2635574) | Cod sursa (job #3234178) | Cod sursa (job #2608573) | Cod sursa (job #2886907)
#include<bits/stdc++.h>
const int N = 1<<9;
using namespace std;
int V[N], h[N], poz[N], nh;
void un_fel_de_swap(int a, int b){
swap(h[a], h[b]);
poz[h[a]] = a;
poz[h[b]] = b;
}
void up(int p){
while(p>1 && V[h[p]] < V[h[p/2]]){
un_fel_de_swap(p, p/2);
p/=2;
}
}
void un_fel_de_push(int x){
h[++nh] = x;
poz[x] = nh;
up(nh);
}
void coboara(int p){
int st=2*p, dr = 2*p+1, ok = p;
if(st<=nh && V[h[st]] < V[h[ok]])
ok=st;
if(dr<=nh && V[h[dr]] < V[h[ok]])
ok=dr;
if(ok!=p){
un_fel_de_swap(p, ok);
coboara(ok);
}
}
void un_fel_de_delete(int p){
if(p==nh){
nh--;
}
else{
h[p] = h[nh--];
poz[h[p]] = p;
up(p);
coboara(p);
}
}
ifstream fin("heapuri.in");
ofstream fout("heapuri.out");
int main(){
int nrop, n=0;
fin>>nrop;
for(int i=0; i<nrop; i++){
int op;
fin>>op;
if(op==1){
fin>>V[++n];
un_fel_de_push(n);
}
if(op==2){
int p;
fin>>p;
un_fel_de_delete(poz[p]);
}
if(op==3){
fout<<V[h[1]]<<'\n';
}
}
}