Pagini recente » Cod sursa (job #820080) | Cod sursa (job #532837) | Cod sursa (job #2990170) | Cod sursa (job #2981746) | Cod sursa (job #1337343)
#include<fstream>
using namespace std;
ifstream fin("heapuri.in");
ofstream fout("heapuri.out");
typedef int var;
#define MAXN 100001
var HEAP[MAXN], TIME[MAXN], POS[MAXN];
var heapsize;
void swapp(var n1, var n2) {
swap(HEAP[n1], HEAP[n2]);
swap(TIME[n1], TIME[n2]);
swap(POS[TIME[n1]], POS[TIME[n2]]);
}
void heap_up(var node) {
if(node == 1) return;
if(HEAP[node] < HEAP[node/2]) {
swapp(node, node/2);
node /= 2;
}
}
void heap_down(var node) {
var fiu = node * 2;
if(fiu > heapsize) return;
if(fiu+1 <= heapsize && HEAP[fiu] > HEAP[fiu+1])
fiu++;
if(HEAP[node] > HEAP[fiu]) {
swapp(node, fiu);
heap_down(fiu);
}
}
var mTime;
void insert(var val) {
heapsize ++;
HEAP[heapsize] = val;
POS[++mTime] = heapsize;
TIME[heapsize] = mTime;
heap_up(heapsize);
}
void del(var t) {
var n = POS[t];
swapp(n, heapsize--);
heap_up(n);
heap_down(n);
}
var extr_min() {
return HEAP[1];
}
int main() {
var m, type, x;
fin>>m;
while(m--) {
fin>>type;
if(type == 3) fout<<extr_min()<<'\n';
else {
fin>>x;
if(type == 1) {
insert(x);
} else {
del(x);
}
}
}
}