Pagini recente » Cod sursa (job #2032888) | Cod sursa (job #1368556) | Cod sursa (job #3205699) | Cod sursa (job #2206456) | Cod sursa (job #1802609)
#include<bits/stdc++.h>
using namespace std;
#define in f
#define out g
ifstream f ("heapuri.in");
ofstream g ("heapuri.out");
int n;
int code;
int x;
int heap[1000010];
int poz;
int aux;
int j;
int aux1;
vector<int>b;
unordered_map<int, int>order;
int insertheap(int x) {
poz++;
heap[poz] = x;
int i = poz;
order[x] = poz;
while(heap[i] <= heap[i / 2] && i > 1) {
aux1 = order[heap[i]];
order[heap[i]] = order[heap[i / 2]];
order[heap[i / 2]] = aux1;
aux = heap[i];
heap[i] = heap[i / 2];
heap[i / 2] = aux;
i = i / 2;
}
}
int removeheap(int x) {
int nr = heap[x];
heap[nr] = heap[poz];
heap[poz] = 0;
poz--;
while((heap[nr] >= heap[2 * nr] || heap[nr] >= heap[2 * nr + 1]) && nr <= poz / 2) {
if(heap[2 * nr] < heap[2 * nr + 1] || heap[2 * nr + 1] == 0) {
aux1 = order[heap[2 * nr]];
order[heap[2 * nr]] = order[heap[nr]];
order[heap[nr]] = aux1;
aux = heap[2 * nr];
heap[2 * nr] = heap[nr];
heap[nr] = aux;
nr *= 2;
} else {
aux1 = order[heap[2 * nr + 1]];
order[heap[2 * nr + 1]] = order[heap[nr]];
order[heap[nr]] = aux1;
aux = heap[2 * nr + 1];
heap[2 * nr + 1] = heap[nr];
heap[nr] = aux;
nr = 2 * nr + 1;
}
}
}
int minheap(int x) {
out << heap[1];
out << "\n";
}
int main() {
in >> n;
for(int i = 1; i <= n; i++) {
in >> code;
if(code == 1) {
in >> x;
b.push_back(x);
insertheap(x);
}
if(code == 2) {
in >> x;
removeheap(x);
}
if(code == 3) {
minheap(x);
}
}
}