Pagini recente » Cod sursa (job #861801) | Cod sursa (job #2670772) | Cod sursa (job #579071) | Cod sursa (job #445207) | Cod sursa (job #2088260)
#include <iostream>
#include <fstream>
#include <unordered_map>
//#include<bits/stdc++.h>
using namespace std;
#define in f
#define out g
ifstream f ("heapuri.in");
ofstream g ("heapuri.out");
const int MAX_SIZE = 1e6;
int n, x, y, code, length, k;
int heap[MAX_SIZE], order[MAX_SIZE];
unordered_map<int, int>swapped;
void insert (int pos) {
if (pos == 1)
return;
if (heap[pos] < heap[pos / 2]) {
swap(heap[pos], heap[pos / 2]);
swap(swapped[heap[pos]], swapped[heap[pos / 2]]);
insert(pos / 2);
}
return;
}
void remove(int pos) {
if (2 * pos > length)
return;
if ((heap[pos] > heap[2 * pos + 1] && (2 * pos + 1) >= length) || heap[pos] > heap[2 * pos]) {
if (heap[2 * pos + 1] > heap[2 * pos] || (2 * pos + 1) > length) {
swap(heap[2 * pos], heap[pos]);
swap(swapped[heap[2 * pos]], swapped[heap[pos]]);
remove(2 * pos);
} else {
swap(heap[2 * pos + 1], heap[pos]);
swap(swapped[heap[2 * pos + 1]], swapped[heap[pos]]);
remove(2 * pos + 1);
}
}
return;
}
void minn() {
out << heap[1] << "\n";
}
int main() {
in >> n;
for(int i = 1; i <= n; i++) {
in >> code;
if(code == 1) {
in >> x;
k++;
order[k] = x;
length++;
heap[length] = x;
swapped[x] = length;
insert(length);
} else if(code == 2) {
in >> x;
int pos = swapped[order[x]];
swap(heap[pos], heap[length]);
heap[length] = 0;
swapped[heap[pos]] = swapped[order[x]];
swapped[order[x]] = 0;
length--;
remove(pos);
} else if(code == 3) {
minn();
}
}
}