Pagini recente » Cod sursa (job #2510247) | Cod sursa (job #2869856) | Cod sursa (job #1051264) | Cod sursa (job #423521) | Cod sursa (job #2613732)
#include <iostream>
#define MAX 200005
using namespace std;
int minHeap[MAX], n = -1;
// operatia 3
int getRoot() {
return minHeap[0];
}
void upHeap(int x) {
int father = x / 2;
if (minHeap[father] > minHeap[x]) {
swap(minHeap[father], minHeap[x]);
upHeap(father);
}
}
void downHeap(int x) {
int son1 = 2 * x + 1;
int son2 = 2 * x + 2;
int son;
if (son1 > n)
return;
if (son2 <= n and minHeap[son1] > minHeap[son2])
son = son2;
else
son = son1;
if (minHeap[son] < minHeap[n]) {
swap(minHeap[x], minHeap[son]);
downHeap(son);
}
}
// operatia 1
int Insert(int x) {
minHeap[++ n] = x;
upHeap(n);
}
int Delete(int x) {
swap(minHeap[x], minHeap[n]);
n --;
downHeap(x);
}
int main() {
freopen("heapuri.in", "r", stdin);
freopen("heapuri.out", "w", stdout);
int t;
int operation, value;
while (t --) {
cin >> operation;
switch(operation) {
case 1:
cin >> value;
Insert(value);
break;
case 2:
cin >> value;
Delete(value - 1);
break;
case 3:
cout << getRoot() << '\n';
break;
}
}
// cout << n << '\n';
cout << getRoot();
return 0;
}