Pagini recente » Cod sursa (job #1627679) | Cod sursa (job #2298764) | Cod sursa (job #1295448) | Cod sursa (job #53356) | Cod sursa (job #336844)
Cod sursa(job #336844)
#include <iostream>
#include <algorithm>
#define NMAX 12
using namespace std;
long v[NMAX],t[NMAX],poz[NMAX],a,b,n,nn,m,q,w;
void down(long n,long k){
int ok=0;
while (ok==0){
ok=1;
if (k*2<=n){
long x=k*2;
if (k*2+1<=n && t[v[k*2+1]]<t[v[k*2]]){
x=k*2+1;
}
if (t[v[x]]<t[v[k]]){
ok=0;
swap(v[x],v[k]);
swap(poz[v[x]],poz[v[k]]);
k=x;
}
}
}
}
void up(long n,long k){
int ok=0;
while (ok==0){
ok=1;
if (k>1){
if (t[v[k]]<t[v[k/2]]){
ok=0;
swap(v[k],v[k/2]);
swap(poz[v[k]],poz[v[k/2]]);
k=k/2;
}
}
}
}
void insert(long &n,long a){
t[++nn]=a;
v[++n]=nn;
poz[nn]=n;
up(n,n);
}
void remove(long &n,long a){
long k=poz[a];
swap(v[k],v[n]);
swap(poz[v[k]],poz[v[n]]);
n--;
if (k>1){
if (v[k/2]>v[k]){
up(n,k);
}
else down(n,k);
}
else down(n,k);
}
long min(){
return t[v[1]];
}
int main(){
freopen("heapuri.in", "r", stdin);
freopen("heapuri.out", "w", stdout);
scanf("%ld ", &m);
for (w=1; w<=m; w++){
scanf ("%ld ", &q);
switch(q){
case 1:{
scanf("%ld ", &a);
insert(n,a);
break;
}
case 2:{
scanf("%ld ", &a);
remove(n,a);
break;
}
case 3:{
printf("%ld\n", min());
break;
}
}
}
return 0;
}