Pagini recente » Cod sursa (job #826954) | Cod sursa (job #1980703) | Cod sursa (job #741257) | Cod sursa (job #753643) | Cod sursa (job #2088241)
#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();
}
}
}